我完成了我的一个应用程序并开始测试。但我发现我的应用程序无法在 Android 11 中运行。我想获取另一个应用程序的文件夹的文件列表并读取其中的项目。但它返回一个空列表,尽管该文件夹中有文件。
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.status_saver">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true"
android:label="status_saver"
android:icon="@mipmap/ic_launcher">
这就是我读取文件夹中文件的方式
var files = Directory( "storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/.Statuses")
.listSync(recursive: true);
print(files);
这就是我请求许可的方式。
void _grantPermission() async {
var status = await Permission.storage.status;
if (status.isGranted) {
_getData();
} else {
await Permission.storage.request();
status = await Permission.storage.status;
_getData();
}
setState(() {
mainStatus = status.isGranted;
});
}
正如我所想,发生这种情况是因为 Android 11 的范围存储。
最佳答案
我们需要通过permission_handler请求manage_external_storage权限。
将此权限添加到AndroidManifest.xml
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
请求权限如下所示
await Permission.manageExternalStorage.request();
然后我们就可以在 Android 11 中读取任何文件并写入任何位置。
关于android - 如何在Android 11 Flutter中读取另一个应用程序的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69062484/