调试时授予位置权限,但在 android 系统上未授予
Permission for location is granted while debugging however not granted on android system
这是ACCESS_FINE_LOCATION权限检测的调试结果,也就是说ACCESS_FINE_LOCATION
权限已经被授予
现在我尝试使用定位服务时,没有得到任何结果,所以我在调试后检查了android系统本身,发现在之后没有授予定位权限调试的时候已经授权了。
可能是什么问题?
我过去在尝试向现有应用程序添加运行时权限时遇到过同样的问题(无法显示请求对话框...)。代码看起来不错,但无法在真实设备上获取对话框。
我的问题是我的目标 SDK 低于 Android 6.0(API 级别 23)。您需要至少达到 API 级别 23 才能使用运行时权限(在 this article 的第一部分中指定)。
不确定你的问题是否相同,但我希望它能有所帮助:)
使用这个库https://github.com/ParkSangGwon/TedPermission
很有用!!!
对于 Android Version >= M
,您必须询问两者 Permission - ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION
才能获得定位服务。一般Runtime Permission
询问码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission
(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission
(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
}, 1); // 1 is requestCode
return;
}
else{
//permission already granted enable your location here
}
}
处理请求:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED){
Toast.makeText(your_activity.this,"PERMISSION_DENIED",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(your_activity.this,"PERMISSION_GRANTED",Toast.LENGTH_SHORT).show();
// permission granted do something
}
break;
}
}
我的问题已经解决了,但是我仍然不知道问题出在哪里,如果有人知道请告诉我,解决方案是我使用了一个名为 https://github.com/hotchemi/PermissionsDispatcher 的库,它成功请求了权限, 它还使用注释来简化代码。
这是ACCESS_FINE_LOCATION权限检测的调试结果,也就是说ACCESS_FINE_LOCATION
权限已经被授予现在我尝试使用定位服务时,没有得到任何结果,所以我在调试后检查了android系统本身,发现在之后没有授予定位权限调试的时候已经授权了。
可能是什么问题?
我过去在尝试向现有应用程序添加运行时权限时遇到过同样的问题(无法显示请求对话框...)。代码看起来不错,但无法在真实设备上获取对话框。
我的问题是我的目标 SDK 低于 Android 6.0(API 级别 23)。您需要至少达到 API 级别 23 才能使用运行时权限(在 this article 的第一部分中指定)。
不确定你的问题是否相同,但我希望它能有所帮助:)
使用这个库https://github.com/ParkSangGwon/TedPermission
很有用!!!
对于 Android Version >= M
,您必须询问两者 Permission - ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION
才能获得定位服务。一般Runtime Permission
询问码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission
(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission
(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
}, 1); // 1 is requestCode
return;
}
else{
//permission already granted enable your location here
}
}
处理请求:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED){
Toast.makeText(your_activity.this,"PERMISSION_DENIED",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(your_activity.this,"PERMISSION_GRANTED",Toast.LENGTH_SHORT).show();
// permission granted do something
}
break;
}
}
我的问题已经解决了,但是我仍然不知道问题出在哪里,如果有人知道请告诉我,解决方案是我使用了一个名为 https://github.com/hotchemi/PermissionsDispatcher 的库,它成功请求了权限, 它还使用注释来简化代码。