如何在Flutter中将文件保存到Android/Media?

3

整天都在试图找到在Android 11设备上创建特定应用程序文件夹的最佳方法。

我尝试了路径提供程序插件中的/storage/0/emulated/Android/data/com.talkmia.app/files以及/storage/0/emulated/Android/data/com.talkmia.app/,但是卸载应用程序后应用程序数据会被清除,而且我认为android:hasFragileData是无用的,因为它只会提示如果应用程序是正常卸载的,而且它也保留了Flutter自己的额外数据。

我也尝试了使用saf包的SAF,但结果发现您无法请求访问根存储,并且要求用户创建文件夹并授予权限是没有意义的。

现在我的唯一选择就是像WhatsApp一样创建它自己的文件夹。将其创建在Android/Media中,但我发现这很难做到。我已经阅读了一些SO帖子以及Github问题,其中一些建议使用MediaStore API,而另一个建议使用Context::getExternalMediaDirs,它会在Android/Media中创建应用程序目录。

唉!我的问题现在是如何在dart/flutter中完成Context::getExternalMediaDirs。我真的不想编写平台代码。

1个回答

0

使用此软件包path_provider

步骤1:获取常用文件路径

Future<String> getFilePath() async {
    Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); // 1
    String appDocumentsPath = appDocumentsDirectory.path; // 2
    String filePath = '$appDocumentsPath/demoTextFile.txt'; // 3

    return filePath;
  }

步骤2:编写内容并保存文件

void saveFile() async {
    File file = File(await getFilePath()); // 1
    file.writeAsString("demo file : demoTextFile.txt"); // 2
  }

步骤三: 读取文件

void readFile() async {
    File file = File(await getFilePath()); // 1
    String fileContent = await file.readAsString(); // 2

    print('File Content: $fileContent');
}

另外,还可以查看 path_provider 包示例,提供所有目录操作。 - Furkan
getApplicationDocumentsDirectory(); 返回 /data/0/com.talkmia.app/ 作为目录,存储在那里的文件将在应用程序被卸载时被删除。 - Matnex Mix
是的,当您删除应用程序时,它将被删除,因为它存储在应用程序(内部)存储器中。 - Furkan
谢谢,但它对我的目的毫无帮助。 - Matnex Mix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接