一、获取GPS信息
Android提供了LocationManager类来获取GPS信息,首先需要检查是否存在GPS模块,并且需要为程序添加获取GPS信息的权限。
1、检查是否存在GPS模块
boolean hasGps = context.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
if (!hasGps) {
// 没有GPS模块
}
2、添加权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
二、位置更新
使用LocationManager的requestLocationUpdates方法获取GPS信息,并且设置更新时间和距离。
1、启动位置更新
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, locationListener);
2、停止位置更新
locationManager.removeUpdates(locationListener);
三、位置监听
添加LocationListener监听GPS信息的变化,并在回调方法中处理相关逻辑。
1、添加监听器
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// 处理定位变化逻辑
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
2、获取位置信息
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
四、完整代码示例
public class MainActivity extends AppCompatActivity implements LocationListener {
private static final int MIN_TIME = 1000;
private static final int MIN_DISTANCE = 10;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
}
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
}
}
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// 处理定位变化逻辑
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
原创文章,作者:HIVAR,如若转载,请注明出处:https://www.506064.com/n/333028.html
微信扫一扫
支付宝扫一扫