android - Flutter中的flutter_downloader下载问题

标签 android flutter dart file flutter-downloader

我正在使用 flutter_downloader 包在 Flutter 中下载文件。文件下载到 Downloads 文件夹中。文件下载后,通知显示下载失败,并抛出以下错误。我被这个错误困了将近两天,你的帮助将拯救我的一天。

This is the code:

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');
    }
  }

This the manifest

<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>

This is the error

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 } ]

最佳答案

上面的代码有一些奇怪的地方。首先,请使用您的 dir.path 变量(而不是对您的路径进行编码)。

如果不指定文件名,flutter downloader 可以为该文件生成一个唯一的 id。如果您想强制使用该名称:即使该文件名不是唯一的,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)
            );
          }

关于android - Flutter中的flutter_downloader下载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74470497/

相关文章:

android - 在 Android 中初始化游戏客户端

datetime - 验证日期时间(flutter/dart)

dart - 为什么我的更新的可观察列表未反射(reflect)在模板中?

flutter :FirebaseException:发生内部错误。 [ CONFIGURATION_NOT_FOUND ]

java.lang.runtimeException 无法启动 Activity componentInfo

java - 如何输入我的文件?

android - Google Play - 包文件无效

flutter - InteractiveViewer 在平移时不会隐藏其他小部件

flutter - 当应用程序通过使用 firebase_messaging 的推送通知终止时如何接收自定义数据?

dart - 我如何在 TextSpan 中使用 'vertical-align: super'