如何在Android 11 Flutter中读取另一个应用程序的数据?

2022-01-28 08:36:24 标签 androidflutter

我完成了自己的一个应用程序,并开始测试。但我发现我的应用程序不能在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中读取任何文件并写入任何位置。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码