Android 13 的行为更改提到了这一点:
如果您的应用面向 Android 13,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。
(https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions)
新的权限是:
但是,如果我需要从任意文件夹读取 PDF 文件,该如何处理?没有像 READ_MEDIA_DOCUMENT 之类的权限。那么除图像、视频或音频之外的其他文件类型呢?我仍然可以对它们使用 READ_EXTERNAL_STORAGE 权限吗?
我在官方文档中没有找到有关此内容的任何信息,但说实话,该文档仅关注媒体文件,没有任何有关其他文件类型的信息(https://developer.android.com/about/versions/13/行为更改13#细粒度媒体权限)。
我也不确定除视频、图像和音频之外的其他文档类型的 WRITE_EXTERNAL_STORAGE 权限。
我已经尝试了大多数问题的结果,但没有一个对我有用。我尝试使用 PermissionAndroid.request 方法访问 WRITE_EXTERNAL_STORAGE 权限,但它总是返回 never_ask_again 作为结果。
我的请求文件:
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
{
title: 'External Storage Write Permission',
message: 'App needs write permission',
},
);
console.log(granted);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
// Start downloading
downloadFile();
console.log('Storage Permission Granted.');
} else {
// If permission denied then show alert
Alert.alert('Error', 'Storage Permission Not Granted');
}
} catch (err) {
// To handle permission related exception
console.log('++++' + err);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 AndroidManifest.xml 文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" …Run Code Online (Sandbox Code Playgroud) android android-external-storage react-native react-native-permissions
文件不仅仅是媒体文件。它也可能是.pdf、.zip、.xls 等。
API 33 上的外部存储权限被永久拒绝。
因此,我们无法像这样的方法进行保存 ->
String path = 'This is external storage path';
File(path).writeAsBytes(bytes)
Run Code Online (Sandbox Code Playgroud)
我的应用程序在 android 11、10、9 等上运行良好。我已经在 AndroidManifest.xml 上设置了存储权限,但它在 android 13 上不起作用。
那么,如何在 android 13 上的外部存储中保存文件?
我知道一种在 AndroidManifest.xml 上设置MANAGE_EXTERNAL_STORAGE 的方法。但它受到 PlayStore 的限制。所以,这对我们来说不太好。
那么,在 Android 13 的外部存储上保存文件的最佳方式是什么?
我看过这个讨论。
storage dart android-permissions android-external-storage flutter
我试图让应用程序用户选择一个文件夹来保存从相机拍摄的照片。如果我需要使用与我正在使用的不同的 NuGet 包或内置功能,我可以这样做。我使用的是我发现的第一个有文件夹选择器并且我可以开始工作的。
我阅读了数十篇文章、答案、问题、技术文档、演练、观看视频等,尝试访问并选择要保存相机图像的文件夹。不幸的是,似乎没有任何效果,因为我不断收到异常,说我没有“存储”权限,尽管我已经尝试了多种方法来获取它们。我还请求几乎所有与“存储”相关的权限,甚至是我认为不是真正权限的权限,但在我读过的其中一份文档中引用了它。
这适用于运行 Android 9 (API 28) 和 Android 12 (API 31) 的 2 台真实设备,但不适用于 Android 13 (API 33) 设备。我正在为FolderPicker使用最新的CommunityToolkit NuGet 包。
查看专门针对该应用程序的权限,“拒绝”部分中没有列出任何权限。
我知道这与我检查权限的自定义方式无关,因为我使用它来请求蓝牙和其他权限。
靠近底部的“FolderPickerResult”代码行返回异常。它不会抛出它,而是将其返回到“结果”对象/变量。异常消息是“未授予存储权限”。
这是返回的整个对象:
{
FolderPickerResult {
Folder = ,
Exception = Microsoft.Maui.ApplicationModel.PermissionException: Storage permission is not granted.at CommunityToolkit.Maui.Storage.FolderPickerImplementation.InternalPickAsync(String initialPath, CancellationToken cancellationToken)in / _ / src / CommunityToolkit.Maui.Core / Essentials / FolderPicker / FolderPickerImplementation.android.cs: line 18 at CommunityToolkit.Maui.Storage.FolderPickerImplementation.PickAsync(String initialPath, CancellationToken cancellationToken)in / _ / src / CommunityToolkit.Maui.Core / Essentials / FolderPicker / FolderPickerImplementation.shared.cs: …Run Code Online (Sandbox Code Playgroud)