即使已设置权限,仍无法写入安卓外部存储

9
在我的使用Xamarin Forms开发的Android 10.0 (Q)应用程序中,我已经在清单文件中正确设置了。
<?xml version="1.0" encoding="utf-8"?>
<manifest **** />
    <application *** ></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

我已经通过代码授予了权限。

var permission = ActivityCompat.CheckSelfPermission(MainActivity.Instance, Manifest.Permission.WriteExternalStorage);

if (permission != Permission.Granted)
{
    ActivityCompat.RequestPermissions(
      MainActivity.Instance, 
      new[] 
      { 
         Manifest.Permission.WriteExternalStorage, 
         Manifest.Permission.ReadExternalStorage 
      }, 1);
}

尝试在“我的文档”或“图片”文件夹中创建文件时,出现权限拒绝错误:“Java.IO.FileNotFoundException:'/storage/emulated/0/Documents/file.txt:open failed: EACCES(Permission denied)'”。 我错过了什么?
var folder= Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments);
folder.Mkdirs();

var filePath = Path.Combine(folder.AbsolutePath, filename);

// I get a permissions error here 
using (var stream = new Java.IO.FileOutputStream(filePath))
{
     await stream.WriteAsync(data).ConfigureAwait(false);
}

在Android 10上确实不可能。 - blackapps
1个回答

9

在您的应用程序完全与作用域存储兼容之前,您可以根据应用程序的目标SDK级别或requestLegacyExternalStorage清单属性暂时选择退出:

Google在Android Q上推出了一个新功能:外部存储过滤视图。快速修复的方法是在AndroidManifest.xml文件中添加以下代码:

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
    Android 10 or higher. -->
  <application android:requestLegacyExternalStorage="true" ... >
   ...
 </application>
</manifest>

1
在Android 11中,设置此标志无效。请问您能否帮我解决这个问题?https://dev59.com/rL_qa4cB1Zd3GeqPP9Fm - Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接