Android Marshmallow permission model on OS 4.0 READ_EXTERNAL_STORAGE permission always not granted

折月煮酒 提交于 2020-01-01 08:35:28

问题


I have a problem when running my app on Android OS 4.0 and requesting READ_EXTERNAL_STORAGE permission with:

ActivityCompat.requestPermissions(ctx, requestedPermissions, requestCode);

I always get on the callback

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) { 

grantResults != PackageManager.PERMISSION_GRANTED

Checking the permission with ActivityCompat.checkSelfPermission is always returning permissionDenied.

It works well on OS 6.0 by requesting the permission with system dialog. Android OS 4.x excepted the 4.0 the permission is always granted. OS 4.0 the other permissions (Camera,Calendar,Contact,Phone) are behaving well except the READ_EXTERNAL_STORAGE causing this issue.

Maybe an OS issue?


回答1:


What ActivityCompat.requestPermissions() does is:

  • call through to the real requestPermissions() if you are on Android 6.0+, or

  • use PackageManager to see if you hold the requested permissions on older versions of Android

The problem with READ_EXTERNAL_STORAGE is that it was added in API Level 16 (Android 4.1). You cannot hold it on older versions of Android than that, for the simple reason that it did not exist.

Either:

  • Set your minSdkVersion to 16, or

  • Put your own logic in to handle this case, recognizing that READ_EXTERNAL_STORAGE is irrelevant prior to API Level 16



来源:https://stackoverflow.com/questions/33482474/android-marshmallow-permission-model-on-os-4-0-read-external-storage-permission

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!