问题描述:使用小米手机动态获取权限后都能请求到wifi信息,但是华为手机获取不到。
使用RxPermissions去动态获取权限,小米手机可以拿到wifi信息,就是华为手机不行,代码如下:
RxPermissions rxPermission = new RxPermissions((Activity) context); rxPermission.requestEach(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION)//多个权限用","隔开
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
//当所有权限都允许之后,返回true
//华为手机允许权限直接走这里了,但是获取不到wifi信息
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时。还会提示请求权限的对话框
// Log.d(TAG, permission.name + " is denied. More info should be provided.");
} else {
// 用户拒绝了该权限,而且选中『不再询问』
}
}
});
去华为手机设置的权限里想打开定位权限,也进不了定位权限设置。没办法,就是使用
Intent intent =new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
去查看一下,果然定位权限没有开启。郁闷呀,为什么动态请求权限允许后没有打开这个定位权限呢!
然后我就做如下处理了:
RxPermissions rxPermission = new RxPermissions((Activity) context); rxPermission.requestEach(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION)//多个权限用","隔开
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
//当所有权限都允许之后,返回true
LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean isOpen = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&!isOpen) {
//华为手机如果没有开定位权限是获取不到wifi信息的。RxPermissions对华为手机定位权限请求没啥反应,那就跳转到设置手动打开
Intent intent =new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时。还会提示请求权限的对话框
// Log.d(TAG, permission.name + " is denied. More info should be provided.");
} else {
// 用户拒绝了该权限,而且选中『不再询问』
}
}
});
这个坑爬了很久,特意分享出来,希望能帮助到你!
网友评论