场景一:获取位置信息开关是否打开
/**
* 手机是否开启位置服务,如果没有开启那么所有app将不能使用定位功能
*/
fun isLocServiceEnable(): Boolean {
val locationManager = Utils.getApp().getSystemService(Context.LOCATION_SERVICE) as LocationManager
val gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
val network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
return gps || network
}
场景二:设置--应用--权限管理--app--位置信息开关
//获取当前应用是否打开位置权限
private val mRxPermissions: RxPermissions by lazy {
RxPermissions(this)
}
检查Manifest.permission.ACCESS_FINE_LOCATION)
mRxPermissions.isGranted(Manifest.permission.ACCESS_FINE_LOCATION)
Total:满足以上两条件,证明定位功能可用
比如获取当前经纬度
if (NetworkUtils.isConnected() && OrderLocationUtils.isLocServiceEnable()
&&mRxPermissions.isGranted(Manifest.permission.ACCESS_FINE_LOCATION)) {
//todo excute your code
}
不满足 可以提示引导用户打开相应开关
获取权限详细情况
mRxPermissions.requestEach(Manifest.permission.ACCESS_FINE_LOCATION)
.subscribe(new Consumer<Permission>() {
@Override public void accept(Permission permission) throws Exception {
if (permission.granted) {
//ok
} else if (permission.shouldShowRequestPermissionRationale) {
//用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的
} else {
//用户拒绝了该权限,并且选中『不再询问』
}
}
}, new Consumer<Throwable>() {
@Override public void accept(Throwable throwable) throws Exception { LogUtils.e("accept(CityFilterActivity.java:199)"+throwable.getMessage());
}
});
打开设置
public static void openSetting(@NonNull Activity activity) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
}
最后,权限库
com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar
网友评论