Android设置多个警报

时间:2012-10-08 16:31:26

标签: android android-alarms

我试图实施一个Android应用,需要多次报警(或提醒)。

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

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

3 个答案:

答案 0 :(得分:89)

如果您要设置多个闹钟(重复或单个),则只需创建具有不同PendingIntent的{​​{1}}个。如果requestCode相同,则新警报将覆盖旧警报。

以下是创建多个单个警报并将其保留在requestCode中的代码。我将ArrayList保留在数组中,因为这是取消闹钟所需的内容。

PendingIntent

另请参阅此问题:How to set more than one alarms at a time in android?

答案 1 :(得分: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);
}

答案 2 :(得分:0)

为了动态设置多个警报,我使用的方法是创建一个警报。然后在我的警报设置类中,初始化一个静态整数(用作请求代码),每当我点击"添加警报"时,每次从我的主要活动开始递增。按钮在我的主要活动中。 E.g。

<强> MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void addAlarmClick(View v) {
    AlarmActivity.broadcastCode++;
    startActivity(new Intent(this, AlarmActivity.class));
}
}

<强> AlarmActivity.java

public class AlarmActivity extends AppCompatActivity {`

public static int broadcastCode=0;
/*some code here*/
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,
                            broadcastCode, myIntent, 0);

我希望这会有所帮助。