【问题标题】:How to get the (absolute) path to the Download folder?如何获取下载文件夹的(绝对)路径?
【发布时间】:2019-01-17 10:56:04
【问题描述】:

在 Flutter 项目中,如何获取 Android 设备中 Download 文件夹的(绝对)路径? 我的下载文件夹是下一个:Alarms、Android、data、DCIM、Documents、Movies、Music、Notifications、Pictures,...

设备:影驰 S8+ SM-G955F。安卓8.0。未扎根。颤振测试版 v0.5.1。飞镖 2.0.0-dev.58.0。视窗 10

File manager showing my Download folder


使用这个包path_provider我得到了这3条路径:

/data/user/0/com.exemple.fonzo/cache
/data/user/0/com.exemple.fonzo/app_flutter
/storage/emulated/0

我无法从我的无根设备 GALAXY S8+ SM-G955F 上的 Solid-Explorer 文件管理器中找到或访问这 3 个文件夹。安卓8.0。我只想找到一个文件夹的绝对路径(如下载):

  • 我可以使用我的 Android 文件管理器应用访问。
  • 我可以从我的 Flutter 项目中将文件写入此文件夹。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    我使用这个库来获取 Android 中的公共下载目录

    ext_storage

    import 'package:ext_storage/ext_storage.dart';
    
    Future<String> _getPathToDownload() async {
      return ExtStorage.getExternalStoragePublicDirectory(
          ExtStorage.DIRECTORY_DOWNLOADS);
    }
    
    final String path = await _getPathToDownload();
    print(path);
    
    

    【讨论】:

    • 此方法返回字符串,所以不能为空。
    • 这个方法返回Future&lt;String&gt;,并且print()应该在return之前
    • 这不是一个空安全包。有什么选择吗?
    【解决方案2】:

    您可以使用downloads_path_provider 包。您将在 AndroidManifest.xml 中添加 &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;。此外,如果您打算写入该文件夹并希望您的应用程序适用于 android 版本 > 6,您必须请求用户写入权限。你可以用https://pub.dev/packages/permission_handler 做到这一点。 await PermissionHandler().requestPermissions([PermissionGroup.storage]);

    【讨论】:

    • 拥有者归档的包
    • 无法使用包,已存档。太伤心了,我现在构建了我的应用程序一个月,最后我无法构建一个版本。
    • 包已过时
    【解决方案3】:

    将函数 getApplicationDocumentsDirectory() 更改为 getExternalStorageDirectory() 它应该显示应用程序的外部目录。

    【讨论】:

    • 我想将我的文件存储到 /storage/emulated/0/Download。如何储存?我使用 getExternalStorageDirectory 但它存储在 /storage/emulated/0/Android/data/com.example.myApps/files
    【解决方案4】:

    在颤振中

    https://pub.dev/packages/ext_storage

    安装 在项目 pubspeck.yaml 中添加 ext_storage 作为依赖项。

    dependencies:
      ext_storage:
    

    用法 首先,你写 import ext_storage 包。

    import 'package:ext_storage/ext_storage.dart';
        void dirpath() async {
          var path = await ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRECTORY_DOWNLOADS);
        }
    

    【讨论】:

    • 它不是空安全的,所以它没用
    【解决方案5】:

    您应该使用本机功能。

    有时,访问电话目录由path_provider包提供。

    有了它,你可以访问:临时目录、app目录、外部存储。

    文档:https://pub.dartlang.org/packages/path_provider

    【讨论】:

    • 下载文件夹是哪一个?
    • 没有人。
    • 如何使用这个包访问下载文件夹?
    • 不,还没有@Adnanhaider...另外我听说 android 11(API 级别 31)有限制...没有验证 tho
    【解决方案6】:

    我在没有插件的情况下简化了它 我使用了这段代码,它的工作就像一个魅力

    Directory dir = Directory('/storage/emulated/0/Download');
    

    【讨论】:

    • 这仅适用于 Android,不适用于 iOS。
    • 是的,对于IOS,它不允许访问下载文件夹,相反,您必须允许程序创建自己的文件夹并且用户可以访问该文件夹
    猜你喜欢
    • 2015-09-09
    • 2011-08-30
    • 1970-01-01
    • 2013-08-28
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2011-10-29
    相关资源
    最近更新 更多