【发布时间】:2017-12-27 09:42:23
【问题描述】:
我必须在运行时检查 Fragment 中的权限以获取位置。 这是一个检查权限的函数。
public void weather() {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
try {
if (checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 123);
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
syncData(latitude, longitude);
}
}
});
return;
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 123) {
weather();
}
}
问题是我的代码像循环一样卡在其中。它不会授予权限,并且每次 if 检查都返回 true 并且我的代码像覆盖权限和 if 语句之间的循环一样来回切换。还有一件事,我们还需要清单中的这两个权限吗?
if (checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 123);
return;
}
【问题讨论】:
-
我不太确定,您可以尝试添加 ActivityCompat 作为前缀,如 ActivityCompat.checkSelfPermission 和 ActivityCompat.requestPermissions 并尝试吗?
-
在低于 Marshmallow 的 Android 版本上无法正常工作!
-
if (requestCode == 123) {中的神奇数字123从何而来? -
@M.ArslanKhan 试试 FragmentCompat.requestPermissions 吗?
-
使用 Rxpermission 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
标签: android permissions