我写了一个简单的Hello World应用程序来调试我遇到的一些权限问题。
问题是我的应用无法获得使用任何内容的权限。是的,我正在使用
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
并且我将该标记放在AndroidManifest.xml中的<manifest>
下
如果我从清单中删除所有<uses-permission>
代码并转到Settings > Apps > TestApp
,则会显示未请求权限
如果我重新插入标签,则表示未授予权限
如果我在实际设备上进行调试,它会说权限存在,所以看起来这个问题只发生在模拟器上!但是,当我使用相同的模拟器从developer.android.com运行android-play-location/LocationUpdates
项目时,它也可以工作,所以我的项目设置可能有问题。
有什么想法吗?
答案 0 :(得分:6)
如果我重新插入标签,则表示没有授予权限
这是因为您在Android 6.0上进行测试,而您的targetSdkVersion
设置为23。
如果我在实际设备上进行调试,它会说权限存在,所以看起来这个问题只发生在模拟器上!
不,它仅在Android 6.0 +上发生。
然而,当我使用相同的模拟器从developer.android.com运行android-play-location / LocationUpdates项目时它也有效,所以可能我的项目设置有问题。
该项目的targetSdkVersion
可能低于23。
ACCESS_FINE_LOCATION
受the Android 6.0 runtime permission system管辖。要么更新您的应用以使用该系统,要么将targetSdkVersion
放在23以下,直到您准备好这样做。
答案 1 :(得分:4)
如果您在M
上运行,只需请求位置许可if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION);
}else{
//Do things as usual
}
等待结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] result){
super.onRequestPermissionsResult(requestCode, permissions, result);
if(requestCode == LOCATION_PERMISSION && result[0] == PackageManager.PERMISSION_GRANTED){
//do things as usual init map or something else when location permission is granted
}
}