当前位置: 首页 > 知识库问答 >
问题:

Android下载管理器和媒体扫描仪

缑嘉玉
2023-03-14

我试图通过DownloadManager下载一张图片,并将其显示在Gallery应用程序中,但我所做的一切都不起作用。根据文档,我认为这段代码就足够了:

  public void downloadImage(String url) {
        Uri Download_Uri = Uri.parse(url);
        DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
        request.allowScanningByMediaScanner();
        download_id = downloadManager.enqueue(request);
  }

但是当文件下载时,它不会出现在Gallery应用程序中。所以我尝试了一个下载接收器来手动添加它,如下所示:

 BroadcastReceiver receiver = new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
         if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
             long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
             Query query = new Query();
             query.setFilterById(downloadId);
             Cursor c = downloadManager.query(query);
             if (c.moveToFirst()) {
                 int columnIndex = c
                         .getColumnIndex(DownloadManager.COLUMN_STATUS);
                 if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                     String uriString = downloadManager.getUriForDownloadedFile(download_id).toString(); 
                             //c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                     Log.i("filname", uriString);
                     MediaScannerConnection.scanFile(ArticleActivity.this,
                              new String[] { uriString }, null,
                              new MediaScannerConnection.OnScanCompletedListener() {
                          public void onScanCompleted(String path, Uri uri) { 
                              Log.i("Media Scanner", "Scanned " + path + ":");
                              Log.i("Media Scanner", "-> uri=" + uri);
                          }
                     });
                 }
             }
         }
     }
 };

那也不行。打印有“filename”标记的URI类似于content://downloads/my_downloads/97'而不是下载的实际文件的名称。在下载应用程序中,文件名与服务器上的文件名相同。使用“媒体扫描程序”标记记录的Uri为空。

我是不是漏掉了什么简单的东西?我为此已经焦虑了几个小时。

共有2个答案

西门良才
2023-03-14

接受的答案对我来说是正确的,直到我在Android 6.0中测试它。我不确定这是否是未记录的更改,但 downloadManager.getUriForDownloadedFile(download_id) 始终返回 content://downloads/my_downloads/97 类型的 URI,无论我是否在下载请求中设置了文件目标。

我是如何通过使用下载管理器中的光标来修复它的:

Query query = new Query();
query.setFilterById(downloadId);
Cursor cursor = downloadManager.query(query);
if (cursor.moveToFirst()) {
    String filePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
艾宏远
2023-03-14

我想出来了。我必须添加一个下载位置。下一行修复了它。

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, Download_Uri.getLastPathSegment());
 类似资料:
  • 我正在使用存储访问框架将图像下载到外部sd卡。问题是这些图像不会出现在图库中。我试图通过发送DocumentFile uri来通知Android媒体扫描仪使用意图,但这似乎不起作用。下面是我如何尝试通知媒体扫描器添加了新图像: 有没有其他方法来通知Android添加了新图像?(我已经尝试了这里描述的方法,但我无法使用这些方法获得真实路径)

  • 在更新的Android Q中,许多事情发生了变化,特别是作用域存储和URI的逐渐弃用。问题是缺乏关于如何在Android Q设备上正确处理媒体文件的文档。 我有一个媒体文件(音频)管理应用程序,但我还找不到一个可靠的方法告诉操作系统,我对一个文件执行了更改,以便它可以更新其纵隔记录。 选项1:MediaScannerService 与主存储中的URI一起工作 不能使用来自辅助存储(如可移动存储)的

  • 因此,在下载和打开文件之间的某个位置,我需要一个if语句来检查它是应该继续还是等待文件。

  • 本文向大家介绍Android中扫描多媒体文件操作详解,包括了Android中扫描多媒体文件操作详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无法添加到媒体库的问题等。本人将通过对源代码的分析,一一解释这些问题。 Android中的多媒体文件扫描机制 Android提供了一个很棒

  • 新增视频 视频转码通知 获取视频列表 获取暂存视频列表 获取指定视频信息 修改视频信息 删除视频 移动暂存视频到媒体库

  • 我设法将文件下载到本地存储,但我无法设法将其路径传递到媒体扫描仪,因此它被添加到库中。 我添加了一个插件来完成媒体扫描仪的工作。试图完成这个任务的函数是这个。 绝对路径参数是来自javascript的file.toURL()。它是一个如下所示的url。cdvfile://localhost/persistent/Download/13republica_personal.jpg 我试图将其修改为/