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

Posted

技术标签:

【中文标题】即使设置了权限,也无法写入 Android 外部存储【英文标题】:Can't write to Android External storage even with permissions set 【发布时间】:2020-06-19 11:50:50 【问题描述】:

在我的使用 Xamarin 表单的 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(权限被拒绝)' 我错过了什么?

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 上确实不可能。 【参考方案1】:

在您的应用与范围存储完全兼容之前,您可以根据应用的目标 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>

【讨论】:

在 Android 11 中,设置此标志没有帮助。你能帮我解决这个问题吗***.com/questions/66560359/…

以上是关于即使设置了权限,也无法写入 Android 外部存储的主要内容,如果未能解决你的问题,请参考以下文章

除非在授予权限后重新启动应用程序,否则无法写入外部存储

即使具有管理员权限也无法读取/写入 HKLM 注册表项和值

“无法写入配置文件。”Magento Connect Manager 1.9.3.2出错

Android 外部存储权限分析

即使将其设置为全局变量,也无法在函数外部使用变量

为什么我的Ionic 3应用程序即使使用有效的IP地址也无法与互联网通信?