Android的下载管理器获取文件名(Android DownloadManager get fil

2019-07-03 17:22发布

在我的应用程序,你可以下载一些文件。 我用了Android的DownloadManager类下载。 下载完成后,应该告诉我,该文件被下载的消息。 问题是,有可能是在同一时间2,3或4的下载。 我的BroadcastReceiver的代码如下所示:

receiver_complete = new BroadcastReceiver(){
         @Override
          public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
                if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE) ){
                    Toast.makeText(MainActivity.this, MainActivity.this.getString(R.string.download_finished, "Here should be the name", Toast.LENGTH_SHORT).show();
                }
         }
     };

我怎样才能得到成品下载的当前文件名?

非常感谢你。

Answer 1:

我想你想要把这样的事情你的里面if块。 更换YOUR_DM与下载管理器实例。

Bundle extras = intent.getExtras();
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
Cursor c = YOUR_DM.query(q);

if (c.moveToFirst()) {
    int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
    if (status == DownloadManager.STATUS_SUCCESSFUL) {
        // process download
        title = c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE));
        // get other required data by changing the constant passed to getColumnIndex
    }
}


Answer 2:

伊恩·香农和他的回答完全正确的,但我sugest一些改进:

  • 请记住,关闭Cursor使用后,避免了“光标跑冒滴漏”。 这Cursor消耗了大量的资源,必须尽快公布。

  • 如果你把一些标题的下载,如:

     DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setTitle("Some title"); 

    由给定的值DownloadManager.COLUMN_TITLE将是"Some title" ,而不是文件名。 所以,我反而建议如下:

     String filePath = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); title = filePath.substring( filePath.lastIndexOf('/')+1, filePath.length() ); 

    COLUMN_LOCAL_FILENAME返回整个路径( /storage/sdcard0/Android/data/.../filename.ext ),但与此代码,我们将只得到文件名。

最终代码:

Bundle extras = intent.getExtras();
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
Cursor c = YOUR_DM.query(q);

if (c.moveToFirst()) {
    int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
    if (status == DownloadManager.STATUS_SUCCESSFUL) {
        String filePath = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
        filename = filePath.substring( filePath.lastIndexOf('/')+1, filePath.length() );
    }
}
c.close();

编辑:您的下载管理器实例来替换YOUR_DM。



Answer 3:

我认为你正在寻找的是DownloadManager.COLUMN_TITLE

下面是Android的文档的链接: http://developer.android.com/reference/android/app/DownloadManager.html#COLUMN_TITLE

这里是一个教程,将解释不仅仅是获得更多的冠军。 这是从一个URL下载的图像,然后在应用程序中显示。 威武有用的,我认为,总体说。

http://wptrafficanalyzer.in/blog/downloading-an-image-from-an-http-url-using-downloadmanager-and-displaying-in-imageview-by-dynamically-registered-broadcastreceiver/



Answer 4:

ü尝试此代码来获取文件名

DownloadManager.COLUMN_LOCAL_FILENAME

我不知道这件事



文章来源: Android DownloadManager get filename