私のアプリケーションでは、DownloadManagerを使用してPDFをダウンロードしています。ダウンロードが完了すると、BroadcastReceiver経由でアプリケーションに通知します。私の問題は、BroadcastReceiverのonReceive()メソッドが2回呼び出されることです。コードは次のとおりです:BroadcastReceiver onReceive()が2回呼び出される
私のリストアダプターでは、選択したpdfをダウンロードするためのforループが実行されます。ダウンロードコードは次のように別のクラスに書かれています:
public static void downloadCheat(final SherlockFragmentActivity activity, final String cheatName, String pathOnServer){
Request request = new Request(
Uri.parse(ApplicationConstants.CHEAT_DOWNLOAD_SERVER_URL
+ "/" + pathOnServer + cheatName + ".pdf"));
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
request.setShowRunningNotification(true);
}
else {
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
final DownloadManager dm = (DownloadManager) activity
.getSystemService(Context.DOWNLOAD_SERVICE);
final long enqueue = dm.enqueue(request);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
long i = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
System.out.println(i);
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
}
}
//create custom notification
}
}
};
activity.registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
私はpdfのダウンロードごとに通知を追加しようとしています。これはHoneyComb以上のバージョンの内部通知をダウンロードマネージャーが完全に扱いますが、GingerBreadの場合は動作しませんので、私自身のカスタム通知をプッシュする必要があります。ですから、pdfが完全にダウンロードされた正確な時刻を判断する必要があります。現在のところ、私は自分のカスタム通知をプッシュすることができますが、通知はpdfのダウンロードごとに2回(onReceive()が各pdfに対して2回ずつ)増えています。誰でも、なぜonReceive()が(PDFごとに)2回呼び出されるのか説明してください。このための回避策はありますか?また、誰かが私の場合ここで放送受信機の登録を解除する方法をお勧めしますか?上記のコードはActivityの一部ではないので、受信機の登録を解除する方法がわかりません。
ありがとう、ポストを読んでくれてありがとう。
がダウンロードIDその2 onReceive()の呼び出しで同じ値はありますか?ダウンロードIDはintent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID、-1) – StarPinkER
で確認できます。私が2つのpdfをダウンロードするとき、ダウンロードIDはonReceiveが呼び出された最初の両方のpdfのものと同じです(first.pdf - > id = 1、second.pdf - > Id = 1)。 2回目に自動的に呼び出されると、ダウンロードIDが変更されます(first.pdf - > Id = 2、second.pdf - > id = 2)。だから基本的に私は1,1,2,2を印刷する4つの印刷ステートメントを見ます。 IDはそれぞれのPDFダウンロードで一意であるはずですか? – andro
あなたのfirst.pdf-> id = 1とsecond.pdf-> id = 1について混乱しています。 – StarPinkER