【问题标题】:Which permission cause Location permission being visible in Settings on Android 6哪个权限导致位置权限在 Android 6 的“设置”中可见
【发布时间】:2015-09-16 16:38:28
【问题描述】:

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

<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 带有开/关开关的权限,但我真的不知道为什么它在那里,因为这里唯一的运行时权限是WRITE_EXTERNAL_STORAGE。所有其他权限都属于here列出的普通权限@

在 pre-M 设备上,我可以看到大概位置权限(基于网络)

谁能解释一下为什么 Android M 中会出现位置权限?

【问题讨论】:

  • 你使用什么库?见:commonsware.com/blog/2015/06/25/…
  • @CommonsWare 就是这样。在合并报告中发现其中一个库添加了 android.permission.ACCESS_COARSE_LOCATION 您可以写一个答案,以便我可以标记为已接受
  • @CommonsWare 外部库是否有权自行声明权限?我想我们仍然需要明确声明库本身的权限!这是并且应该是默认行为!或者他们是否改变了 android M 中的某些内容?
  • @MuhammadBabar:“外部库是否有权自行声明权限?” -- 是的。
  • @MuhammadBabar:是的。请参阅我对这个问题的原始评论中的博客文章。如果您在这方面还有其他问题,请提出新的 Stack Overflow 问题。

标签: android permissions


【解决方案1】:

@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"/>

这真的出乎意料,因为位置权限对于 GoogleMap 来说是可选的,至少根据他们的规范。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2017-09-20
    • 2017-09-23
    • 2020-08-21
    相关资源
    最近更新 更多