Android模拟器上未授予权限

时间:2015-08-25 20:38:20

标签: android permissions location

我写了一个简单的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在主机OS X Yosemite(VMWare Fusion)上运行

2 个答案:

答案 0 :(得分:6)

  

如果我重新插入标签,则表示没有授予权限

这是因为您在Android 6.0上进行测试,而您的targetSdkVersion设置为23。

  

如果我在实际设备上进行调试,它会说权限存在,所以看起来这个问题只发生在模拟器上!

不,它仅在Android 6.0 +上发生。

  

然而,当我使用相同的模拟器从developer.android.com运行android-play-location / LocationUpdates项目时它也有效,所以可能我的项目设置有问题。

该项目的targetSdkVersion可能低于23。

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