android - 即使设置了权限,也无法写入 Android 外部存储

标签 android xamarin android-permissions

在我的使用 Xamarin Forms 的 Android 10.0 (Q) 应用程序中,我已在 list 中正确设置

<?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);
}

最佳答案

在您的应用与范围存储完全兼容之前,您可以根据应用的目标 SDK 级别或 requestLegacyExternalStorage 暂时选择退出。 list 属性:

谷歌在 Android Q 上有一个新功能:外部存储的过滤 View 。对此的快速解决方法是在 AndroidManifest.xml 文件中添加以下代码:

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

关于android - 即使设置了权限,也无法写入 Android 外部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60569224/

相关文章:

java - TextView不添加新行

opencv - 如何在 Xamarin 中使用 openCV?

xamarin - 我可以根据条件从Ios调用MVVM交叉命令方法吗?

listview - 更改 Android 上的 Xamarin.Forms Listview 中的默认 TextColor

android - 仅对较旧的 android 版本 : maxSdkVersion does not work? 需要权限

java - 是否可以在 Android 中设置提示 Spinner

android - 共享流 : mapLatest not getting triggered

android - 如何获取 "network"时间(来自称为 "Automatic"的 "Use network-provided values"设置),而不是手机上的时间?

java - Android ACTION_CALL 不工作

android - 未找到处理 Intent act​​ion.dial 的 Activity