哪个权限导致位置权限在Android 6上的“设置”中可见

时间:2015-09-16 16:38:28

标签: android permissions

我在我的应用中指定了以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.VIBRATE"android:maxSdkVersion="18"/>

我的targetSDKVerion设置为23

在使用Android 6的Nexus 9运行预览图像上,我在应用设置Location中看到了开/关切换的权限,但我真的不知道为什么它存在,因为这里唯一的运行时权限是{{1 }}。所有其他权限都属于列出的正常权限here

同样在pre-M设备上,我可以看到近似位置许可(基于网络)

有人可以解释为什么Android M中会显示位置权限吗? app Permissions settins

1 个答案:

答案 0 :(得分:3)

@CommonsWare的评论是正确的。我能够在清单合并中找到ACCESS_COARSE_LOCATION。负责的图书馆是 Google Play服务 - 地图

uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from [com.google.android.gms:play-services-maps:7.5.0] .../app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/7.5.0/AndroidManifest.xml:23:5-80

在该清单中找到有4个权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

这是非常意外的,因为Google地图的位置权限是可选的,至少根据他们的规范。

幸运的是,我找到了一种删除该权限的方法。清单合并允许删除像这样的节点

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>

只需在您自己的AndroidManifest.xml中指定要在合并时删除的节点。