2
 public void SetAlarm(Context context, int sec)
 {
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent i = new Intent(context, Alarm.class);
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
     am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*5 , pi);
     i = new Intent(context, Alarm.class);
     pi = PendingIntent.getBroadcast(context, 0, i, 0);   
     am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*10 , pi); 

 }

onReceive が 10 秒後に 1 回だけ機能するのはなぜですか?

4

1 に答える 1

8

同じ情報を持つ保留中のインテントがアラーム マネージャーに提供されているため、アラーム マネージャーは最初のアラームをキャンセルします。(filterEquals(Intent) で定義されているように) Intent がこれと一致する任意のタイプのアラームはキャンセルされます。

複数のアラーム (繰り返しまたは単一) を設定する場合は、異なる requestCode で PendingIntents を作成するだけです。requestCode が同じ場合、新しいアラームが古いアラームを上書きします。

これで試してください...

 public void SetAlarm(Context context, int sec)
 {
 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
 Intent i = new Intent(context, Alarm.class);
 PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
 am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*5 , pi);
 i = new Intent(context, Alarm.class);
 pi = PendingIntent.getBroadcast(context, 1, i, 0);   // new request code
 am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*10 , pi); 

}
于 2013-01-24T15:12:09.763 に答える