这是检查ACCESS_FINE_LOCATION权限的调试结果,这意味着已为ACCESS_FINE_LOCATION授予了权限
现在当我尝试使用位置服务时,我没有得到任何结果,所以我在调试后检查了android系统本身,并发现在调试时已经授予了该位置的权限
可能是什么问题?
答案 0 :(得分:0)
我在尝试向现有应用添加运行时权限时无法获得同样的问题(无法让请求对话框显示...)。代码看起来不错但无法在真实设备上获得对话框。
我的问题是我的目标SDK低于Android 6.0(API级别23)。您需要至少定位API级别23才能使用运行时权限(在this article的第一部分中指定)。
不确定您的问题是否相同,但我希望它可以提供帮助:)
答案 1 :(得分:0)
使用此库https://github.com/ParkSangGwon/TedPermission
非常有用!!!
答案 2 :(得分:0)
对于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;
}
}
答案 3 :(得分:0)
我的问题已经解决但是我仍然不知道问题出在哪里,如果有人知道请让我知道,解决方法是我使用了一个名为https://github.com/hotchemi/PermissionsDispatcher的库,它成功请求了权限,它还使用简化代码的注释。