没有提示或切换Android权限

时间:2016-11-06 16:20:14

标签: android android-permissions android-7.0-nougat

在Android 7上的应用,targetSdkVersion 24,我正在尝试申请Android权限WRITE_EXTERNAL_STORAGE。但是,当我运行应用程序时,它从不提示我获得此权限,当我在设备上时,我会转到设置>应用> MyApp>权限,我没有看到与WRITE_EXTERNAL_STORAGE相关的任何切换。

我错过了某个地方的一步吗?

AndroidManifest.xml(完整文件on pastebin

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

MyActivity.java

int permission = activity.checkSelfPermission(perm);
if (permission != PackageManager.PERMISSION_GRANTED)
    activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

1 个答案:

答案 0 :(得分:0)

在花了一些时间进行调查之后,我就这个问题制定了一个理论。

我的应用程序在AndroidManifest.xml中有一些依赖项:

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

如果SDK高于18,这样做会自动拒绝WRITE_EXTERNAL_STORAGE权限。这与我得到的问题一致;权限被拒绝,甚至没有提示用户。

然后我测试将此添加到我的App AndroidManifest.xml以尝试覆盖lib依赖项权限设置:

android:maxSdkVersion="25"

由于masSdkVersion上的Merge冲突,它无法构建。这进一步证实了我对这个问题的怀疑; android:maxSdkVersion传播到App模块。

在深入研究文档后,我无法找到解决方案,但我有一个解决方法。 READ_EXTERNAL_STORAGE与WRITE_EXTERNAL_STORAGE位于同一组中,并且doc说要求同一组的权限将适用于整个组的其余权限。

所以我在我的App和AndroidManifest.xml中测试了READ权限,它有效,但我认为这很愚蠢。

当我找到合适的解决方法时,我会更新。