我正在使用颤振开发移动应用程序。为此,我使用了下载路径提供程序来获取手机的下载目录。模拟器返回/storage/emulated/0/Download。此外,当我将文件保存在此目录中时,该文件可以在下载文件夹中看到。
但在真实设备上,它也会返回相同的目录路径。/storage/emulated/0/Download这对实际设备是否正确?因为在实际设备上我看不到下载文件夹中保存的文件。
有没有办法在真机上找到下载目录?
liv*_*ove 16
path_provider 可能很快会发生一些变化,有一些未解决的问题:
https://github.com/flutter/flutter/issues/35783
截至目前,在 Android 设备上获取下载路径的最佳方法是使用:
/storage/emulated/0/Download/
Run Code Online (Sandbox Code Playgroud)
不需要。
并在Android中获取外部目录路径:
/storage/emulated/0/
Run Code Online (Sandbox Code Playgroud)
“模拟”一词并不意味着它是模拟器路径,它只是一个命名约定。
确保您有写入文件的权限,将其添加到 manifest.xml 文件中,就在 <manifest 标签下:
<manifest package="..." ... >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
并在运行时请求权限。
见https://pub.dev/packages/permission_handler
将此添加到清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
然后使用这两个包:
在 pubspec 添加:
permission_handler: ^5.0.1+1
downloads_path_provider: ^0.1.0
Run Code Online (Sandbox Code Playgroud)
然后
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));
}
Run Code Online (Sandbox Code Playgroud)
然后使用方法:
var file = await writeFile(uint8List, 'name');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13861 次 |
| 最近记录: |