我在使用flutter_downloader包download files in Flutter。文件在Downloads文件夹中下载。下载文件后,显示failed to download的通知和下面的错误将抛出。我被这个错误困住了将近两天,你的帮助将拯救我的一天。
这是代码:
void _download(String url) async {
final status = await Permission.storage.request();
if (status.isGranted) {
final externalDir = await getExternalStorageDirectory();
final id = await FlutterDownloader.enqueue(
fileName: "LRMonoPhase4.mp3",
url: 'https://www.kozco.com/tech/LRMonoPhase4.mp3',
savedDir: '/storage/emulated/0/Download',
showNotification: true,
openFileFromNotification: true,
);
util.showToast(id.toString());
} else {
print('Permission Denied');
}
}这份清单
<provider
android:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"
android:authorities="${applicationId}.flutter-downloader-init"
android:exported="false">
<!-- changes this number to configure the maximum number of concurrent tasks -->
<meta-data
android:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"
android:value="5" />
</provider>,这是错误
D/DownloadWorker( 9655): Update too frequently!!!!, this should be dropped
D/DownloadWorker( 9655): Update too frequently!!!!, this should be dropped
D/EGL_emulation( 9655): app_time_stats: avg=19.11ms min=7.88ms max=35.05ms count=53
D/DownloadWorker( 9655): Update notification: {notificationId: 11, title: LRMonoPhase4.mp3, status: RUNNING, progress: 100}
D/DownloadWorker( 9655): Update too frequently!!!!, but it is the final update, we should sleep a second to ensure the update call can be processed
D/EGL_emulation( 9655): app_time_stats: avg=21.50ms min=8.00ms max=35.47ms count=46
D/DownloadWorker( 9655): Update notification: {notificationId: 11, title: LRMonoPhase4.mp3, status: FAILED, progress: -1}
W/System.err( 9655): java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Download/LRMonoPhase4.mp3
W/System.err( 9655): at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:825)
W/System.err( 9655): at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:450)
W/System.err( 9655): at vn.hunghd.flutterdownloader.IntentUtils.buildIntent(IntentUtils.kt:19)
W/System.err( 9655): at vn.hunghd.flutterdownloader.IntentUtils.validatedFileIntent(IntentUtils.kt:36)
W/System.err( 9655): at vn.hunghd.flutterdownloader.DownloadWorker.downloadFile(DownloadWorker.kt:445)
W/System.err( 9655): at vn.hunghd.flutterdownloader.DownloadWorker.doWork(DownloadWorker.kt:208)
W/System.err( 9655): at androidx.work.Worker$1.run(Worker.java:86)
W/System.err( 9655): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
W/System.err( 9655): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
W/System.err( 9655): at java.lang.Thread.run(Thread.java:1012)
I/WM-WorkerWrapper( 9655): Worker result FAILURE for Work [ id=69548c69-93cb-47f0-b54e-a23e199f96af, tags={ flutter_download_task, vn.hunghd.flutterdownloader.DownloadWorker } ]发布于 2022-11-17 10:33:37
在上面的代码中有一些奇怪的地方。首先,请使用您的dir.path变量(而不是重新编码您的路径)。
然后,如果不指定文件名,颤振下载机可以为该文件生成唯一的id。如果您想强制使用名称:fileName正在工作,即使这个文件名不是唯一的。它生成“相同”通知,您也可以打开该文件。
如果您检查该目录,您将看到第二个文件名将是替换文件(filename (1))。
if(statuses[Permission.storage]!.isGranted){
var dir = await getExternalStorageDirectory();
if(dir != null) {
final taskId = await FlutterDownloader.enqueue(
url: instructionUrl,
headers: {}, // optional: header send with url (auth token etc)
savedDir: dir.path,
/*fileName:"uniquename",*/
showNotification: true, // show download progress in status bar (for Android)
saveInPublicStorage: true,
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);
}https://stackoverflow.com/questions/74470497
复制相似问题