1、获得LocationManager引用
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
2、获取最后一次成功定位的位置信息,取值包括:
- GPS_PROVIDER:GPS获得
- NETWORK_PROVIDER:网络获得
- PASSIVE_PROVIDER:其他应用程序提供
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
3、获取所有定位提供者
List<String> providers = locationManager.getAllProviders();
4、获取指定定位提供者
LocationProvider provider = locationManager.getProvider(Provider name);
5、判断指定定位提供者是否可用
locationManager.isProviderEnabled(provider);
6、获取可用的定位提供者
List<String> providers = locationManager.getProviders(true);
7、获取可用的定位提供者,并且用criteria对象指定条件
Criteria criteria = new Criteria(); // 创建一个定位准则对象
criteria.setAccuracy(Criteria.ACCURACY_COARSE); // 设置定位精确度
criteria.setAltitudeRequired(true); // 设置是否需要海拔信息
criteria.setBearingRequired(true); // 设置是否需要方位信息
criteria.setCostAllowed(true); // 设置是否允许运营商收费
criteria.setPowerRequirement(Criteria.POWER_LOW); // 设置对电源的需求
List<String> providers = locationManager.getProviders(criteria, true);
8、获取最佳定位提供者
String bestProvider = locationManager.getBestProvider(criteria, true);
9、在onResume()中注册接收位置跟新事件的接收器
locationManager.requestLocationUpdates(bestProvider,
300,// 间隔多少毫秒通知
0,// 最小间隔距离变化通知
mLocationListener);
10、在onPause()中删除注册
locationManager.removeUpdates(mLocationListener);
11、位置监听器
// 定义一个位置变更监听器
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
//当禁用的提供程序被调用时会立即调用
@Override
public void onProviderDisabled(String arg0) {}
//用户启用提供程序时被调用
@Override
public void onProviderEnabled(String arg0) {}
//状态变化时被调用
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
};
12、在AndroidManifest.xml开启权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
13、请求定位授权
//这里以ACCESS_COARSE_LOCATION为例
if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
this.requestPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION}, 100);//自定义的code 随便填一个数
} else {
// 用户已授权定位信息
}
14、授权回调
// 授权回调。询问是否同意授权的时候,系统会弹出对话框,我们选择之后,会进行回调。在回调里面进行判断。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 100: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被用户同意。
// 执形我们想要的操作
} else {
Log.i("GPS", "未授权定位权限");
LToast.showToast("未授权定位权限");
// 用户授权定位信息
}
}
}
}