Android : 如何在循环中使用相同的 AlarmManager?
Android : How to use same AlarmManager in loop?
我写了下面的报警方法
public void alarm(int time){
Intent intent = new Intent(MainActivity.this, Alarm.class);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0 , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
此方法非常有效。但是当我多次调用该方法时出现问题。喜欢,
alarm(10);
alarm(50);
这次只调用alarm(10);
,不调用alarm(50);
任何人请帮助它为什么显示这个问题!
您将相同的 ID 0
(PendingIntent::getBroadcast
中的第二个参数)提供给多个 PendingIntent
。这是你的错误。
根据您设置的 FLAG
,行为可能会有所不同。
考虑为每个 PE
或 standard flags 之一使用不同的 ID。
另见:
您的 PendingIntent
两次调用您的方法时都具有相同的属性。当您第二次调用 PendingIntent.getBroadcast()
时,它将 return 第一次创建的 PendingIntent
。
如果你想让闹钟触发两次,你需要这样做:
public void alarm(int time, int requestCode){
Intent intent = new Intent(MainActivity.this, Alarm.class);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), requestCode , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
然后这样称呼它:
alarm(10, 0);
alarm(50, 1);
// context variable contains your `Context`
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
for(i = 0; i < 10; ++i)
{
Intent intent = new Intent(context, OnAlarmReceiver.class);
// Loop counter `i` is used as a `requestCode`
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0);
// Single alarms in 1, 2, ..., 10 minutes (in `i` minutes)
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000 * i,
pendingIntent);
intentArray.add(pendingIntent);
}
您提供的 ID 相同 (0)
您需要使用不同的唯一 ID。像这样使用不同的待定意图 ID。您可以使用毫秒作为 id。
public void alarm(int time, int requestCode){
Intent intent = new Intent(MainActivity.this, Alarm.class);
Long timeToMilliSeconds = timeToMilliSeconds(hour, minute);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), timeToMilliSeconds , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
这样称呼它
alarm(10, 0);
alarm(50, 1);
对于多个 Pendingintent,它需要不同的 ID,因此在调用方法中传递
不同的ID。
我写了下面的报警方法
public void alarm(int time){
Intent intent = new Intent(MainActivity.this, Alarm.class);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0 , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
此方法非常有效。但是当我多次调用该方法时出现问题。喜欢,
alarm(10);
alarm(50);
这次只调用alarm(10);
,不调用alarm(50);
任何人请帮助它为什么显示这个问题!
您将相同的 ID 0
(PendingIntent::getBroadcast
中的第二个参数)提供给多个 PendingIntent
。这是你的错误。
根据您设置的 FLAG
,行为可能会有所不同。
考虑为每个 PE
或 standard flags 之一使用不同的 ID。
另见:
您的 PendingIntent
两次调用您的方法时都具有相同的属性。当您第二次调用 PendingIntent.getBroadcast()
时,它将 return 第一次创建的 PendingIntent
。
如果你想让闹钟触发两次,你需要这样做:
public void alarm(int time, int requestCode){
Intent intent = new Intent(MainActivity.this, Alarm.class);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), requestCode , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
然后这样称呼它:
alarm(10, 0);
alarm(50, 1);
// context variable contains your `Context`
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
for(i = 0; i < 10; ++i)
{
Intent intent = new Intent(context, OnAlarmReceiver.class);
// Loop counter `i` is used as a `requestCode`
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0);
// Single alarms in 1, 2, ..., 10 minutes (in `i` minutes)
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000 * i,
pendingIntent);
intentArray.add(pendingIntent);
}
您提供的 ID 相同 (0) 您需要使用不同的唯一 ID。像这样使用不同的待定意图 ID。您可以使用毫秒作为 id。
public void alarm(int time, int requestCode){
Intent intent = new Intent(MainActivity.this, Alarm.class);
Long timeToMilliSeconds = timeToMilliSeconds(hour, minute);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), timeToMilliSeconds , intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi);
}
这样称呼它
alarm(10, 0);
alarm(50, 1);
对于多个 Pendingintent,它需要不同的 ID,因此在调用方法中传递 不同的ID。