如何获取(绝对)下载文件夹的路径?

use*_*870 6 dart flutter

在Flutter项目中,如何获取Android设备中“下载”文件夹的(绝对)路径?我的下载文件夹是下一个文件夹:警报,Android,数据,DCIM,文档,电影,音乐,通知,图片,...

设备:GALAXY S8 + SM-G955F。Android 8.0。不扎根。Flutter beta v0.5.1。Dart 2.0.0-dev.58.0。Windows 10

显示我的下载文件夹的文件管理器


使用这个包,path_provider我得到了这三个路径:

/data/user/0/com.exemple.fonzo/cache
/data/user/0/com.exemple.fonzo/app_flutter
/storage/emulated/0
Run Code Online (Sandbox Code Playgroud)

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

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

还在等待答案。提前致谢。

Eng*_*Eng 30

我个人使用这个方法:

path_provider: 2.0.9
Run Code Online (Sandbox Code Playgroud)
Future<String?> getDownloadPath() async {
    Directory? directory;
    try {
      if (Platform.isIOS) {
        directory = await getApplicationDocumentsDirectory();
      } else {
        directory = Directory('/storage/emulated/0/Download');
        // Put file in global download folder, if for an unknown reason it didn't exist, we fallback
        // ignore: avoid_slow_async_io
        if (!await directory.exists()) directory = await getExternalStorageDirectory();
      }
    } catch (err, stack) {
      print("Cannot get download folder path");
    }
    return directory?.path;
  }
Run Code Online (Sandbox Code Playgroud)

输出 :

  • 在 IOS 上,它会创建一个以您的应用程序名称命名的文件夹,并将文件放入其中。用户可以轻松找到该文件夹​​,非常直观。
  • 在Android上,我测试默认下载文件夹是否存在(大多数情况下都有效),否则我将其放入外部存储目录中(在这种情况下,用户很难手动找到该文件......)。

对于 IOS :(@Wai Yan 提到)也许在 plist.info 中添加以下键,以便更好地在文档文件夹中查看您的应用程序(/sf/answers/5212058421/)。

UISupportsDocumentBrowser
Run Code Online (Sandbox Code Playgroud)


小智 6

注意:自 2022 年 2 月起,此软件包已弃用。(请参阅Github 存储库自述文件


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

外部存储

import 'package:ext_storage/ext_storage.dart';

Future<String> _getPathToDownload() async {
  return ExtStorage.getExternalStoragePublicDirectory(
      ExtStorage.DIRECTORY_DOWNLOADS);
}

final String path = await _getPathToDownload();
print(path);

Run Code Online (Sandbox Code Playgroud)

  • 这个包现在已经停产了... (3认同)

Kri*_*nov 5

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


Rub*_*elo 2

您应该使用本机功能。

有时,访问电话簿是由path_provider包提供的。

有了它,您可以访问:临时目录、应用程序目录、外部存储。

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

  • 如何使用此包访问下载文件夹? (3认同)