2016-11-19 34 views
2

DownloadManagerを使用してリンクからファイルをダウンロードし、ダウンロード中に進行ホイールを表示するアプリケーションをビルドしました。ダウンロードが完了すると、プログレスホイールをダウンロードアイコンに変更するために放送受信機を送ります。アンドロイドでキャンセルする放送受信機

通知トレイからダウンロードを取り消すと、これで放送されないため、進行ホイールが停止しないという問題に直面しています。

キャンセルのダウンロードのブロードキャストを取得するにはどうすればよいですか?

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

    } 

} 

エラーの場合、あなたはあなたのプログレスバーを停止することができます。

+0

私は質問を放送していると言いましたが、それは機能しません。 –

関連する問題