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 或更高版本中的所有文件访问权限违规