Xamarin.Android开发:Android12全文件访问权限问题求助
Android 12+ 全存储访问解决方案(Xamarin.Android)
1. 清单文件配置
首先确保在AndroidManifest.xml中正确添加权限,权限需直接放在<manifest>标签下:
<!-- Android 10+ 全存储权限 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" /> <!-- 兼容 Android 9 及以下的读写权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
2. 主动触发系统授权页面
MANAGE_EXTERNAL_STORAGE是Android 10+的特殊权限,无法通过常规的RequestPermissions方法申请,必须引导用户到系统设置页面手动开启授权。在Xamarin.Android中实现代码如下:
if (Build.VERSION.SdkInt >= BuildVersionCodes.R) { // 检查是否已获得全存储权限 if (!Environment.IsExternalStorageManager) { // 跳转到当前应用的全存储权限设置页 var intent = new Intent(Settings.ActionManageAppAllFilesAccessPermission); intent.AddCategory(Intent.CategoryDefault); intent.SetData(Android.Net.Uri.Parse($"package:{PackageName}")); StartActivityForResult(intent, 100); // 100为自定义请求码 } }
随后在OnActivityResult中处理授权结果:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (requestCode == 100) { if (Build.VERSION.SdkInt >= BuildVersionCodes.R) { if (Environment.IsExternalStorageManager) { // 授权成功,执行读写逻辑 } else { // 用户拒绝授权,可提示用户开启权限才能使用相关功能 } } } }
3. 重要提示
- 该权限仅对文件管理器类应用开放Google Play上架权限,若你的应用不属于此类,提交审核时可能被拒绝,个人自用不受影响,但商用需评估合规性。
- 若需兼容Android 10(API29),可在
<application>标签添加android:requestLegacyExternalStorage="true",但Android 12+系统会忽略该属性。
内容的提问来源于stack exchange,提问作者readn
相关产品推荐
相关产品推荐

