私が理解していることから、アラームマネージャでアラームをスケジュールするときは、PendingIntentインスタンスを提供する必要があります。
アラームには、電話がスリープ状態またはロックされている場合でも起動して機能するものと、機能しないものの2種類があります。
また、一度に10個のスケジュールを設定する場合、AlarmManagerは、別のインテントアクションを指定していない限り、既存のスケジュール済み保留中のインテントを新しいものに置き換えます。アラームを使用するときは、常にsqliteデータベースを使用して、あるスケジュールで実行したいジョブをキューに入れてきました。ブザーが鳴ったときにすべて同じインテントを実行したので、そこから一度に1つのアラームをスケジュールします。
EXTRA_ALARM_COUNTエクストラは、繰り返し発生するアラームがスケジュールされていて、ユーザーのデバイスがスリープ状態のときに複数回オフになった場合に機能します。電話がウェイクアップすると、過去にキューに入れられたものはすべて再生されます。この場合、保留中のインテントが起動し、setメソッドを呼び出すときにタイプとしてRTCまたはELAPSED_REALTIMEを使用して構築されたため、アラームがスキップされた回数の値があります。
これは私がAlarmMangerと通常どのように対話するかのサンプルです
protected void scheduleNext(Context context) {
AlarmManager alarmManager = getAlarmManager();
Intent intent = new Intent(MyIntent.ACTION_DO_WORK);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
String where = Queue.SCHEDULED_DATE + "= (select min(" + Queue.SCHEDULED_DATE + ") from queue where " + Queue.COMPLETED_DATE + " is null)";
Cursor cursor = context.getContentResolver().query(Queue.CONTENT_URI, Queue.PROJECTION, where, null, null);
if (cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(Queue._ID));
long when = cursor.getLong(cursor.getColumnIndex(Queue.SCHEDULED_DATE));
alarmManager.set(AlarmManager.RTC_WAKEUP, when, pendingIntent);
}
cursor.close();
}