【问题标题】:Pending Intent only work for 1 alarm待定意图仅适用于 1 个警报
【发布时间】:2015-07-17 08:23:58
【问题描述】:

目前,我有一个使用pendingIntennt 的警报,该警报在按下按钮(保存警报)时起作用。问题是,当我安排并保存了多个警报时,将响起的警报只是最新的警报。我怎样才能做到这样所有的警报都会响起?

这是按钮内部的代码:

public void saveReminder(View v) {

    final int reminderHour = mReminderTimePicker.getCurrentHour().intValue();
    final int reminderMinute = mReminderTimePicker.getCurrentMinute().intValue();
    final String reminderName = mReminderName.getText().toString();
    final boolean reminderStatus = mReminderSwitchSwitch.isChecked();

    //AlarmManagerHelper.cancelAlarms(this);
    //Updating Reminder Information
    ParseQuery<ParseObject> query = ParseQuery.getQuery("MyReminders");
    query.getInBackground(objectId, new GetCallback<ParseObject>() {
        public void done(ParseObject reminderObject, ParseException e) {
            if (e == null) {
                reminderObject.put("reminderName", reminderName);
                reminderObject.put("reminderHour", reminderHour);
                reminderObject.put("reminderMinute", reminderMinute);
                reminderObject.put("reminderStatus", reminderStatus);
                reminderObject.saveInBackground();
            }
        }
    });
    //set time into calendar instance
    GregorianCalendar calendar= new GregorianCalendar();
    calendar.set(GregorianCalendar.HOUR_OF_DAY,reminderHour);
    calendar.set(GregorianCalendar.MINUTE,reminderMinute);
    calendar.set(GregorianCalendar.SECOND,00);
    calendar.set(GregorianCalendar.MILLISECOND,0000);

    AlarmManager reminder = (AlarmManager)getSystemService(Context.ALARM_SERVICE);


    Intent reminderintent = new Intent(this, ReminderService.class);
    //push information to reminder screen
    reminderintent.putExtra("reminderName", reminderName);
    reminderintent.putExtra("reminderHour", reminderHour);
    reminderintent.putExtra("reminderMinute", reminderMinute);


    PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 1, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
    reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);


    finish();
}

【问题讨论】:

    标签: android android-intent alarm android-pendingintent


    【解决方案1】:

    您的所有闹钟似乎都使用相同的 requestCode 1,因此每次设置闹钟时,它都会在您调用 PendingIntent.getActivity() 时覆盖之前的闹钟。

    您需要一种为每个警报设置唯一 ID 的方法。

    使用 objectId 字符串,您可以通过将字符串中的所有字符相加来生成唯一 ID:

        int id = 0;
        for (int i = 0; i < objectId.length(); i++){
            id += objectId.charAt(i);
        }
    
        PendingIntent operation = PendingIntent.getActivity(getBaseContext(), id, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
        reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);
    

    【讨论】:

    • 如何从按钮点击调用这个方法?我用了 setArlarm();它不起作用。我想我需要在其中添加一些属性。我是否需要指定将进入此方法的所有属性。如:remindHour、reminderMinute、userName、Tone等?这将是一个很长的列表。
    • 我使用 xml 中的 android:onClick 而不是编写 onClickListener。这有关系吗?我编辑了如图所示的代码
    • 正如您在我的代码中看到的那样。我有我所有的警报信息去解析。您认为使用pendingIntent 让闹钟响起更好吗?还是在使用解析数据库时有其他更好的方法来触发警报?
    • 当我这样做时,public void setAlarm 括号内的“int requestcode”变为红色。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多