始终未授予OS 4.0 READ_EXTERNAL_STORAGE权限上的Android Marshmallow权限模型

ski*_*rix 12 android android-permissions android-6.0-marshmallow

在Android OS 4.0上运行我的应用程序并请求READ_EXTERNAL_STORAGE权限时出现问题:

ActivityCompat.requestPermissions(ctx, requestedPermissions, requestCode);
Run Code Online (Sandbox Code Playgroud)

我总是接受回调

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

grantResults != PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)

检查权限ActivityCompat.checkSelfPermission始终返回permissionDenied.

通过系统对话框请求权限,它在OS 6.0上运行良好.Android OS 4.x除了4.0之外,总是授予权限.OS 4.0的其他权限(相机,日历,联系人,电话)表现良好,除了READ_EXTERNAL_STORAGE导致此问题.

可能是操作系统问题?

Com*_*are 11

什么ActivityCompat.requestPermissions()的是:

  • requestPermissions()如果您使用的是Android 6.0及以上版本,请致电真实版

  • 用于PackageManager查看您是否在旧版Android上保留所请求的权限

问题READ_EXTERNAL_STORAGE是它是在API Level 16(Android 4.1)中添加的.你不能在旧的Android版本上保留它,原因很简单,因为它不存在.

或者:

  • 将您设置minSdkVersion为16,或

  • 将自己的逻辑放入处理这种情况,认识到READ_EXTERNAL_STORAGE在API级别16之前这是无关紧要的

  • 一个简单的解决方法是请求`WRITE_EXTERNAL_STORAGE`权限,即API 4.在M中,`WRITE`和`READ`存在于同一权限组中,因此请求前者也将授予对后者的访问权限.唯一的缺点是4.1之前的版本将看到需要新的权限,如果您之前只是要求"READ". (7认同)