在尝试在API 23中获取位置更新时,我不断收到安全性异常。系统似乎认为我没有相应的权限:
java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.
但是,如果我在调用位置服务之前检查用户位置权限,并且精细和粗略位置都返回PERMISSION_GRANTED:
private boolean locationPermissionsGranted(Context context){
int fineLocation = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
int coarseLocation = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION);
return ((fineLocation == PackageManager.PERMISSION_GRANTED) || (coarseLocation == PackageManager.PERMISSION_GRANTED));
}
我通过提示用户使用系统对话框授予权限来在运行时设置权限:
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
Permissions.ACCESS_FINE_LOCATION.getPermission());
我在获得权限后获得异常,因为我的布尔检查我是否有权访问位置返回true但系统不会让我访问位置。我在OnePlus One上对此进行了测试,并开始认为隐私保护可能会搞错,但我已将其设置为允许访问位置,因此我不确定错误为何持续存在。
答案 0 :(得分:-2)
Requesting Permissions at Run Time
从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时。此方法简化了应用安装过程,因为用户在安装或更新应用时无需授予权限。
您需要请求访问位置权限并在应用运行时处理请求响应