DownloadManagerを使用してリンクからファイルをダウンロードし、ダウンロード中に進行ホイールを表示するアプリケーションをビルドしました。ダウンロードが完了すると、プログレスホイールをダウンロードアイコンに変更するために放送受信機を送ります。アンドロイドでキャンセルする放送受信機
通知トレイからダウンロードを取り消すと、これで放送されないため、進行ホイールが停止しないという問題に直面しています。
キャンセルのダウンロードのブロードキャストを取得するにはどうすればよいですか?
DownloadManagerを使用してリンクからファイルをダウンロードし、ダウンロード中に進行ホイールを表示するアプリケーションをビルドしました。ダウンロードが完了すると、プログレスホイールをダウンロードアイコンに変更するために放送受信機を送ります。アンドロイドでキャンセルする放送受信機
通知トレイからダウンロードを取り消すと、これで放送されないため、進行ホイールが停止しないという問題に直面しています。
キャンセルのダウンロードのブロードキャストを取得するにはどうすればよいですか?
ダウンロードプロセスのイベントを取得するには、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;
}
}
}
エラーの場合、あなたはあなたのプログレスバーを停止することができます。
私は質問を放送していると言いましたが、それは機能しません。 –
通知トレイに「キャンセル」ボタンがありますか? – Lino
@Linoダウンロードマネージャを使用してダウンロードしています。キャンセルボタンは通知トレイのアンドロイドに自動的に追加されました。 –