Flutter - 将文件保存到下载文件夹 - downloads_path_provider

新手上路,请多包涵

我正在使用 flutter 开发一个移动应用程序。为此,我使用了 downloads-path-provider 来获取手机的下载目录。模拟器返回 /storage/emulated/0/Download 。此外,当我在此目录中保存文件时,该文件可以在下载文件夹中看到。

但在真实设备上,它也会返回相同的目录路径。 /storage/emulated/0/Download 这对实际设备是否正确?因为在实际设备上我看不到下载文件夹中保存的文件。

有什么解决方案可以在真实设备上找到下载目录吗?

原文由 Amith Dissanayaka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.7k
2 个回答

path_provider 可能很快就会发生一些变化,有一些未解决的问题:

https://github.com/flutter/flutter/issues/35783

截至目前,在 Android 设备上获取下载路径的最佳方法是使用:

 /storage/emulated/0/Download/

不需要。

并在 Android 中获取外部目录路径:

 /storage/emulated/0/

“模拟”一词并不意味着它是模拟器路径,它只是一种命名约定。

确保您有权写入该文件,将其添加到 manifest.xml 文件中,就在

 <manifest package="..." ... >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

并在运行时请求权限。

请参阅 https://pub.dev/packages/permission_handler

原文由 live-love 发布,翻译遵循 CC BY-SA 4.0 许可协议

将此添加到清单:

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

然后使用这两个包:

  1. permission_handler 请求存储权限
  2. downloads_path_provider 将文件保存在下载目录中

在 pubspec 添加:

 permission_handler: ^5.0.1+1
downloads_path_provider: ^0.1.0

然后

 Future<File> writeFile(Uint8List data, String name) async {
    // storage permission ask
    var status = await Permission.storage.status;
    if (!status.isGranted) {
      await Permission.storage.request();
    }
    // the downloads folder path
    Directory tempDir = await DownloadsPathProvider.downloadsDirectory;
    String tempPath = tempDir.path;
    var filePath = tempPath + '/$name';
    //

    // the data
    var bytes = ByteData.view(data.buffer);
    final buffer = bytes.buffer;
    // save the data in the path
    return File(filePath).writeAsBytes(buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
  }

然后使用方法:

 var file = await writeFile(uint8List, 'name');

原文由 Abdelrahman Tareq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题