无法在颤动中访问android 11版设备上的隐藏文件夹

Posted

技术标签:

【中文标题】无法在颤动中访问android 11版设备上的隐藏文件夹【英文标题】:Cannot access hidden folder on android version 11 device in flutter 【发布时间】:2022-01-20 09:42:02 【问题描述】:

我正在制作一个显示 WhatsApp 状态的应用程序。 WhatsApp 状态存储在 WhatsApp 文件夹中名为“.statuses”的隐藏文件中。但是当我尝试从 .statuses 文件夹中获取子目录和文件的列表时,我得到一个空字符串。 此问题仅在 android 版本 11 设备上发生。该代码对于未隐藏的文件夹和 android 版本低于 11 的设备运行良好。 我的代码附在下面:

final Directory _photoDir =
    Directory(
        '/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/.Statuses');

var imageList = _photoDir
          .listSync()
          .map((item) => item.path)
          .where((item) => item.endsWith(".jpg"))
          .toList(growable: false);

print(imageList);

【问题讨论】:

【参考方案1】:

当我们的“目标 SDK 版本”为 30(Android 11)或更高版本时会出现此问题

我们必须在“android manifest”文件中包含这个权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

如果你像我一样使用“permission_handler”包,你可以这样显示权限提示:

 void requestStoragePermission() async 
    Map<Permission, PermissionStatus> result = await [
      Permission.storage,
      Permission.manageExternalStorage,
    ].request();

    //if permission is granted only then show home screen else permission error screen is already shown
    if (result[Permission.storage] == PermissionStatus.granted &&
        result[Permission.manageExternalStorage] == PermissionStatus.granted) 
      setState(() );
    
  

【讨论】:

以上是关于无法在颤动中访问android 11版设备上的隐藏文件夹的主要内容,如果未能解决你的问题,请参考以下文章

PDF文件未在颤动的android发行版中打开[关闭]

如何在颤动中隐藏android的底部导航栏

在启动某些活动之前,小部件无法在 Android 11 上的设备启动时启动服务

android 构建失败 - 颤动

颤动的 Image.network 无法在发布 apk 上运行

如何在文本字段中颤动的值末尾设置光标位置?