即使设置了权限也无法写入 Android 外部存储
Can't write to Android External storage even with permissions set
在使用 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: 打开失败: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);
}
在您的应用与分区存储完全兼容之前,您可以根据您应用的目标 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>
在使用 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: 打开失败: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);
}
在您的应用与分区存储完全兼容之前,您可以根据您应用的目标 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>