2015-05-08 2 views
0

Я загружаю файл на внешнее хранилище устройства из моего приложения Android с веб-сервера, используя DownloadManager. Мне нужно запустить еще одну функцию после завершения этой загрузки. мой файл загрузить код выглядит следующим образом:Поиск загрузки завершен с downloadManager в android

String url = "http://192.168.1.105/download/file.ext"; 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "files.ext"); 
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
final long downloadId = manager.enqueue(request); 

пожалуйста, подсказывают, как получить что-то вроде onDownloadComplete .....

+0

может 'downloadId' использоваться, чтобы знать, когда загрузка завершится? –

ответ

1

Я нашел ответ на : DownloadManager.ACTION_DOWNLOAD_COMPLETE broadcast receiver receiving same download id more than once with different download statuses in Android
и код для меня следующим образом:

private boolean downloadComplete(long downloadId){ 
     DownloadManager dMgr = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
     Cursor c= dMgr.query(new DownloadManager.Query().setFilterById(downloadId)); 

     if(c.moveToFirst()){ 
      int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 

      if(status == DownloadManager.STATUS_SUCCESSFUL){ 
       return true; //Download completed, celebrate 
      }else{ 
       int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON)); 
       Log.d(TAG, "Download not correct, status [" + status + "] reason [" + reason + "]"); 
       return false; 
      } 
     } 
     return false; 
    } 
2

Вы можете использовать ACTION_DOWNLOAD_COMPLETE с BroadcastReceiver

public class DonwloadCompleteReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // get complete download id 
     long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
     // to do here 
    } 
} 
+0

Я считаю, что в нем есть некоторые сообщения об ошибке: http://code.google.com/p/android/issues/detail?id=18462 –

0
registerReceiver(onComplete, 
       new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

this См

Смежные вопросы