2016-11-19 5 views
2

У меня есть приложение, которое загружает файл из ссылки с помощью DownloadManager и покажет текущее колесо при загрузке. Как только загрузка завершена, я отправляю широковещательный приемник, чтобы изменить колесо прогресса на загруженный значок.Широковещательный приемник для отмены загрузки в android

Теперь перед проблемой, что, если я отменю загрузку из лотка для уведомлений, я не получаю никакой трансляции для этого, так что колесо хода не останавливается.

Может у кого-нибудь есть идея, как я могу получить трансляцию для отмены загрузки?

+0

У вас есть кнопка «Отмена» в лотке уведомлений? – Lino

+1

@Lino Я использую диспетчер загрузки для загрузки. Кнопка отмены добавлена ​​автоматически в андроидную нугу в лотке уведомлений. –

ответ

0

Чтобы получить информацию о процессе загрузки, вам необходимо зарегистрироваться downloadManager для трансляции приемника.

IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
    mContext.registerReceiver(downloadReceiver, filter); 

Здесь трансляция приемник:

private BroadcastReceiver downloadReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     checkDownloadStatus(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)); 
    } 
}; 

Так при загрузке аннулирует или успешно загружена или какая-либо ошибка, вы получите статус. Даже вы отменяете уведомление. Вы можете проверить статус:

private void checkDownloadStatus(long downloadReference) { 
    DownloadManager.Query myDownloadQuery = new DownloadManager.Query(); 
    myDownloadQuery.setFilterById(downloadReference); 

// Запросить диспетчер загрузки о запрошенных загрузках. Курсор курсор = downloadManager.query (myDownloadQuery); если (cursor.moveToFirst()) {

 //column for status 
     int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); 
     int status = cursor.getInt(columnIndex); 
     //column for reason code if the download failed or paused 
     int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON); 
     int reason = cursor.getInt(columnReason); 
     //get the download filename 

     String statusText = ""; 
     String reasonText = ""; 

     switch (status) { 
      case DownloadManager.STATUS_FAILED: 
       statusText = "STATUS_FAILED"; 
       switch (reason) { 
        case DownloadManager.ERROR_CANNOT_RESUME: 
         reasonText = "ERROR_CANNOT_RESUME"; 
         break; 
        case DownloadManager.ERROR_DEVICE_NOT_FOUND: 
         reasonText = "ERROR_DEVICE_NOT_FOUND"; 
         break; 
        case DownloadManager.ERROR_FILE_ALREADY_EXISTS: 
         reasonText = "ERROR_FILE_ALREADY_EXISTS"; 
         break; 
        case DownloadManager.ERROR_FILE_ERROR: 
         reasonText = "ERROR_FILE_ERROR"; 
         break; 
        case DownloadManager.ERROR_HTTP_DATA_ERROR: 
         reasonText = "ERROR_HTTP_DATA_ERROR"; 
         break; 
        case DownloadManager.ERROR_INSUFFICIENT_SPACE: 
         reasonText = "ERROR_INSUFFICIENT_SPACE"; 
         break; 
        case DownloadManager.ERROR_TOO_MANY_REDIRECTS: 
         reasonText = "ERROR_TOO_MANY_REDIRECTS"; 
         break; 
        case DownloadManager.ERROR_UNHANDLED_HTTP_CODE: 
         reasonText = "ERROR_UNHANDLED_HTTP_CODE"; 
         break; 
        case DownloadManager.ERROR_UNKNOWN: 
         reasonText = "ERROR_UNKNOWN"; 
         break; 
       } 
       break; 
      case DownloadManager.STATUS_PAUSED: 
       statusText = "STATUS_PAUSED"; 
       switch (reason) { 
        case DownloadManager.PAUSED_QUEUED_FOR_WIFI: 
         reasonText = "PAUSED_QUEUED_FOR_WIFI"; 
         break; 
        case DownloadManager.PAUSED_UNKNOWN: 
         reasonText = "PAUSED_UNKNOWN"; 
         break; 
        case DownloadManager.PAUSED_WAITING_FOR_NETWORK: 
         reasonText = "PAUSED_WAITING_FOR_NETWORK"; 
         break; 
        case DownloadManager.PAUSED_WAITING_TO_RETRY: 
         reasonText = "PAUSED_WAITING_TO_RETRY"; 
         break; 
       } 
       break; 
      case DownloadManager.STATUS_PENDING: 
       statusText = "STATUS_PENDING"; 
       break; 
      case DownloadManager.STATUS_RUNNING: 
       statusText = "STATUS_RUNNING"; 
       break; 
      case DownloadManager.STATUS_SUCCESSFUL: 
       statusText = "STATUS_SUCCESSFUL"; 

       break; 
     } 

    } 

} 

В случае ошибки, вы можете остановить ProgressBar.

+0

Я упоминал в вопросе, что я отправляю трансляцию, но она не работает. –

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