Android 11(R) 中的权限被拒绝问题

Posted

技术标签:

【中文标题】Android 11(R) 中的权限被拒绝问题【英文标题】:Permission Denied Issue in Android 11(R) 【发布时间】:2020-08-30 13:48:30 【问题描述】:

现在我们正在迁移 android 11(R) 以进行测试,但我们面临“权限被拒绝”问题。

路径:/mnt/sdcard/Android/data/package_name/files/package_name/*

注意:使用以下代码获取公共路径,

Context context = _activity.getApplicationContext();
return context.getExternalFilesDir(null) +"/" + getPackageName();

我们需要为 Android 11(R) 做一些特别的事情吗?

你能推荐一下吗?

【问题讨论】:

developer.android.com/preview/privacy/storage 【参考方案1】:

@VMS android 已从 android 11 开始强制使用范围存储。要迁移到范围存储,请使用 ApplicationContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getPath();

我们不能将 null 传递给 getExternalFilesDir();

【讨论】:

为什么不使用getExternalFilesDir(null)?这会在 Android 2.2 和 Android 11 上带来应用外部存储上的 files 文件夹。【参考方案2】:

在 中的 AndroidManifest.xml 中添加 requestLegacyExternalStorage

<application
    android:name=".Application"
    android:allowBackup="true"
    android:appComponentFactory="whateverString"
    android:icon="@drawable/icon"
    android:requestLegacyExternalStorage="true"

【讨论】:

要求 android 11 而不是 android 10 您的代码仅适用于 Andorid 10【参考方案3】:

您最常获得外部存储权限

清单:

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

onCreate() 方法:

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (permissionCheck != PackageManager.PERMISSION_GRANTED) 
    ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE, MY_PERMISSIONS_REQUEST_READ_MEDIA);
 else 
    readDataExternal();

重写 onRequestPermissionsResult 方法以获取回调:

 @Override
 public void onRequestPermissionsResult(int requestCode, String permissions[],    int[] grantResults) 
 switch (requestCode) 
    case MY_PERMISSIONS_REQUEST_READ_MEDIA:
        if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) 
            readDataExternal();
        
        break;

    default:
        break;


【讨论】:

以上是关于Android 11(R) 中的权限被拒绝问题的主要内容,如果未能解决你的问题,请参考以下文章

Android 中的 Firestore 权限在测试规则上被拒绝

带有策略的 Android 应用程序拒绝:Android 版本 R 或更高版本中的所有文件访问权限违规

打开失败:EACCES(权限被拒绝)ANDROID 11

在小米 android 11 设备上,我们的 android 应用程序的忽略电池优化权限被拒绝

Android 11 打开失败:EACCES(权限被拒绝)

flutter ios 照片权限总是返回权限被永久拒绝