Android设置多个警报

Sam*_*mmy 38 android android-alarms

我正在尝试实施一个Android应用程序,需要多次报警(或提醒).

我已经搜索过了,但是我发现的最近的是固定数量的警报设置,我猜这个例子没有用.

我想知道是否存在动态设置多个警报的方法,例如一组警报,然后在特定时间戳中触发这些警报.

Nik*_*dze 92

如果您想设置多个警报(重复或单个),那么您只需要创建PendingIntent不同的警报requestCode.如果requestCode相同,则新警报将覆盖旧警报.

以下是创建多个单个警报并将其保留的代码ArrayList.我保持PendingIntent在阵列中,因为这是取消闹钟所需要的.

// 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);
}
Run Code Online (Sandbox Code Playgroud)

另外,请看这个问题:如何在android中一次设置多个警报?.


iam*_*her 5

您可以设置警报的重复次数:

在这种情况下:

public void AddAlarm(int requestCode,MutableDateTime dueDate,int repeat) {
        Intent intent = new Intent(context, AlarmReceiver.class);
        intent.putExtra(Constants.RECORD_ID, requestCode);
        intent.putExtra("REPEAT", repeat);
        PendingIntent operation = PendingIntent.getBroadcast(context, requestCode, intent,  PendingIntent.FLAG_ONE_SHOT );
        MutableDateTime due = dueDate.toMutableDateTime();
        switch(repeat){
        case NO_REPEAT:
            due.addMinutes(0);
            break;
        case DAILY:

            due.addDays(1); 
            break;
        case WEEKLY:
            due.addWeeks(1);
            break;
        case MONTHLY:
            due.addMonths(1);
            break;
        case MONTHLY_2:
            due.addWeeks(5);            
            break;
        case YEARLY:
            due.addYears(1);
            break;
        }
        due.add(-(dueDate.getMillis()));
        due.setSecondOfMinute(0);
        dueDate.setSecondOfMinute(0);
        alarm.cancel(operation);
        alarm.set(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), operation);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), due.getMillis(), operation);
}
Run Code Online (Sandbox Code Playgroud)