安卓模拟器未授予权限

3

我写了一个简单的“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项目时,它也可以工作,所以可能是我的项目设置有问题。

有什么想法吗?

  • IDE:Android Studio
  • 虚拟设备:Nexus_5_API_23
  • 操作系统:Ubuntu 14.04客户机运行在Mac OS X Yosemite(VMWare Fusion)主机上
2个回答

6
如果我重新添加标签,它会显示“未授权的权限”。这是因为您正在测试Android 6.0,并且您的targetSdkVersion设置为23。
如果我在实际设备上进行调试,它会显示权限存在,所以看来这个问题只发生在模拟器上!不,这只发生在Android 6.0+上。
然而,当我使用相同的模拟器运行developer.android.com上的android-play-location/LocationUpdates项目时,它也能正常工作,所以可能是我的项目设置出了问题。那个项目可能具有低于23的targetSdkVersion。
ACCESS_FINE_LOCATION受Android 6.0运行时权限系统的管理。要么更新您的应用程序以使用该系统,要么将您的targetSdkVersion降至23以下,直到您准备好这样做。

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
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接