Android AlarmManager只能运行一次

Hem*_*mul 1 android

 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); 

 }
Run Code Online (Sandbox Code Playgroud)

为什么onReceive只在10秒后工作一次?

Jam*_*aaz 7

警报管理器将取消第一个警报,因为已向警报管理器提供具有相同信息的待处理意图.任何类型的警报,其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); 

}
Run Code Online (Sandbox Code Playgroud)