java - android alarmmanager 多个警报,一个覆盖另一个?

标签 java android

我在帖子中搜索了我的问题的答案,但没有找到任何解决我问题的方法。我正在尝试使用一个 AlarmSettings 类设置 3 个不同的警报。当我设置两个警报时,第二个优先于第一个,第一个永远不会响起。我认为这可能与我的未决 Intent 有关......我真的是 android 新手,非常感谢您的帮助。这是我设置闹钟的代码:

public void setAlarm() {

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, timepicker.getCurrentHour());
        calendar.set(Calendar.MINUTE, timepicker.getCurrentMinute());
        calendar.set(Calendar.SECOND, 0);

        if (timepicker.getCurrentHour() < calendar.get(Calendar.HOUR_OF_DAY)) { //if the alarm hour is less than the current hour
            calendar.add(Calendar.DATE, 1);                                     //then add 24 hours (1 DATE or Day)                 
        }

        //Create the text that we want to set the TextView alarmtime to in Main
        StringBuilder sb = new StringBuilder();
        if (timepicker.getCurrentHour() > 12) {
            sb.append(timepicker.getCurrentHour() - 12);
        } else {
            sb.append(timepicker.getCurrentHour());
        }
        sb.append(":");
        sb.append(timepicker.getCurrentMinute());
        sb.append(" ");
        if (timepicker.getCurrentHour() > 12) {
            sb.append("pm");
        } else {
            sb.append("am");
        }

        if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 1) {
            ((GlobalVariables)getApplication()).setAlarm1Cal(calendar);
            Main.alarmTime1.setText(sb);

            Intent intent1 = new Intent(AlarmSettings.this, AlarmReceiver.class);
            intent1.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
            PendingIntent pendingIntent1 = PendingIntent.getActivity(getApplicationContext(), 0, intent1, PendingIntent.FLAG_ONE_SHOT);

            alarmmanager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent1);

        } else if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 2) {
            ((GlobalVariables)getApplication()).setAlarm2Cal(calendar);
            Main.alarmTime2.setText(sb);

            Intent intent2 = new Intent(AlarmSettings.this, AlarmReceiver.class);
            intent2.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
            PendingIntent pendingIntent2 = PendingIntent.getActivity(getApplicationContext(), 0, intent2, PendingIntent.FLAG_ONE_SHOT);

            alarmmanager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent2);

        } else if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 3) {
            ((GlobalVariables)getApplication()).setAlarm3Cal(calendar);
            Main.alarmTime3.setText(sb);

            Intent intent3 = new Intent(AlarmSettings.this, AlarmReceiver.class);
            intent3.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
            PendingIntent pendingIntent3 = PendingIntent.getActivity(getApplicationContext(), 0, intent3, PendingIntent.FLAG_ONE_SHOT);

            alarmmanager3.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent3);
        }

        finish();

        Toast.makeText(getApplicationContext(), "system time: " + System.currentTimeMillis() + "\n" + "picked time: " + calendar.getTimeInMillis(), Toast.LENGTH_LONG).show();      
    }

最佳答案

PendingIntent pendingIntent1 = PendingIntent.getActivity(getApplicationContext(), 0, intent1, PendingIntent.FLAG_ONE_SHOT);

将 0 属性更改为您的闹钟的 id,例如您有三个闹钟,

用 0,1,2 重复上面的代码。

这样它们就不会互相覆盖。

关于java - android alarmmanager 多个警报,一个覆盖另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271417/

相关文章:

java - RxJava v1 到 v2

java - 如何使用 JpaItemWriter 更新现有实体?

java - 为什么在 Java 中有随机数的函数和类?

android - 无法从警报对话框和异常错误中的 RatingBar 获取值 (Android)

Android BluetoothDevice connectGatt 在某些设备上总是失败并出现错误 133

android - ImageView放大动画截断图片

java - 如何通过数据库更改java中的xml属性值

java - JTS - Hibernate + Postgres + UUID 冲突

java - 单击按钮时使用动画吗?

javascript - Android 3.x 仅限 WebView 文本选择 + JavaScript