【问题标题】:Android DownloadManager and Media ScannerAndroid 下载管理器和媒体扫描器
【发布时间】:2014-03-29 20:07:45
【问题描述】:

我正在尝试通过 DownloadManager 下载图像以显示在图库应用中,但我所做的一切都不起作用。根据文档,我认为这段代码就足够了:

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

这也不起作用。带有“文件名”标签的 URI 类似于“content://downloads/my_downloads/97”,而不是下载的实际文件的名称。在下载应用程序中,文件名与服务器上的文件名相同。使用“Media Scanner”标签记录的 Uri 为空。

我在这里遗漏了一些简单的东西吗?我已经为此拉了几个小时的头发。

【问题讨论】:

    标签: android android-download-manager android-mediascanner


    【解决方案1】:

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

    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, Download_Uri.getLastPathSegment());
    

    【讨论】:

      【解决方案2】:

      在我在 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));
      }
      

      【讨论】:

        猜你喜欢
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多