これは、Android のアラームで起こっていると私が信じていることの確認 (または反論) を求める投稿です。この話題は、ブログや StackOverflow の投稿で頻繁に出てきますが、この 2 点 (以下) についての明確な説明は見つかりませんでした。
以下のコードは、設定して警告し、設定を解除することを目的としています。それは動作しません。
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN);
PendingIntent sender = PendingIntent.getBroadcast(context, _id, intent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, now.getTime().getTime(), sender);
Intent toCancel = new Intent(context, AlarmReceiver.class);
toCancel.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN);
PendingIntent pendingToCancel = PendingIntent.getBroadcast(context,
_id, toCancel, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(pendingToCancel);
PendingIntent.getBroadast() の最初の呼び出しに PendingIntent.FLAG_ONE_SHOT を渡す代わりに、代わりにゼロを渡すと機能します。この動作が文書化されているとは思いません。
PendingIntent.getBroadast() の 2 番目の引数 (上記の _id) が同一でない場合も、コードは機能しません。これが文書化されているとは思いません。Android ドキュメントでは、2 番目の引数は「送信者のプライベート リクエスト コード (現在は使用されていません)」と記載されています。
問題は、私がこの振る舞いを適切に説明したかどうか、またはこれらの一般化がエピフェノメナであるかどうかです。