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

mqxuamgl  于 2023-02-05  发布在  Flutter
关注(0)|答案(8)|浏览(522)

在Flutter项目中,如何获取Android设备中Download文件夹的(绝对)路径?My Download文件夹位于以下文件夹旁边:报警,Android,数据,DCIM,文档,电影,音乐,通知,图片,...
设备:银河S8+ SM-G955 F。安卓系统8.0。非根。Flutter测试版v0.5.1。 dart 2.0.0-dev.58.0。Windows 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-G955 F. Android 8.0上的Solid-Explorer文件管理器中找到或访问这3个文件夹。我只想找到以下文件夹的绝对路径(如下载):

  • 我可以用我的Android文件管理器应用程序访问。
  • 我可以从我的flutter项目在这个文件夹中写入文件。
fumotvh3

fumotvh31#

我个人使用这种方法:

path_provider: 2.0.9
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;
  }

输出:

  • 在IOS上,它会创建一个文件夹,并将文件放入其中。用户可以很容易地找到该文件夹,非常直观。
  • 在Android上,我测试默认的下载文件夹是否存在(它的工作大部分时间),否则我放在外部存储目录(在这种情况下,用户很难手动找到文件...).

对于IOS:(@Wai Yan提到)也许可以在您的www.example.com中添加以下密钥,以便更好地查看文档文件夹中的应用程序(https://stackoverflow.com/a/74457977/10088439)。plist.info to better see your app in document folder ( https://stackoverflow.com/a/74457977/10088439 ).

UISupportsDocumentBrowser
nkhmeac6

nkhmeac62#

我用这个库来获取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);
piztneat

piztneat3#

你可以使用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]);来完成这一操作

lnlaulya

lnlaulya4#

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

zi8p0yeb

zi8p0yeb5#

您应该使用本机功能。
此时,path_provider包提供了访问电话簿的功能。
使用它,您可以访问:临时目录、应用程序目录、外部存储。
文件:https://pub.dartlang.org/packages/path_provider

xmjla07d

xmjla07d6#

Flutter中
https://pub.dev/packages/ext_storage
安装将ext_storage作为一个独立项添加到您的项目pubspeck. yaml中。

dependencies:
  ext_storage:

用法首先,编写import ext_storage包。

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

xmd2e60i7#

我简化了它没有插件我用这个代码和它的工作就像一个魅力

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

x8diyxa78#

使用路径提供程序包,您应该能够做到:

import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;

String? downloadDirectory;
if (Platform.isAndroid) {
  final externalStorageFolder = await getExternalStorageDirectory();
  if (externalStorageFolder != null) {
    downloadDirectory = p.join(externalStorageFolder.path, "Downloads");
  }
} else {
  final downloadFolder = await getDownloadsDirectory();
  if (downloadFolder != null) {
    downloadDirectory = downloadFolder.path;
  }
}

相关问题