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 秒后只工作一次?

4

1 回答 1

8

警报管理器将取消第一个警报,因为具有相同信息的待处理意图已提供给警报管理器。任何类型的任何警报,其 Intent 与此匹配(由 filterEquals(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 回答