然后创建取消使用AlarmManager设置的多个警报

时间:2011-02-28 19:48:57

标签: android alarmmanager

我有一个应用程序,允许用户选择一个分钟池。所以,他们可能会选择5分钟,15分钟,30分钟和50分钟。然后,使用以下代码同时为每个那些设置一个警报管理器警报(这段代码效果很好):

//SET ALL ALARMS
                for(int i = 0; i < spAlarms.length; i++) {
                    try {
                        if(!spAlarms[i].equals("")) {
                            int time = Integer.valueOf(spAlarms[i]);
                            final int intent_id = (int) System.currentTimeMillis();
                            /*
                            Calendar cal = Calendar.getInstance();
                            cal.add(Calendar.MINUTE, time);
                            */
                            Intent intent = new Intent(Hop_Timer.this, Alarm_Receiver.class);
                            intent.putExtra("alarm_message", "Time for your " + spAlarms[i] + " min addition!");
                            intent_ids += "intent_id;";
                            PendingIntent sender = PendingIntent.getBroadcast(Hop_Timer.this, intent_id, intent, PendingIntent.FLAG_ONE_SHOT);
                            AlarmManager am = (AlarmManager) Hop_Timer.this.getSystemService(Context.ALARM_SERVICE);
                            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (time*1000), sender);
                            //Toast.makeText(getApplicationContext(), "Set alarm" + String.valueOf(System.currentTimeMillis() + (time*1000)), Toast.LENGTH_SHORT).show();
                        }
                    } catch (Exception e) {
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
                //ALARMS SET

我希望用户能够清除所有警报并重新开始,即使在设置并点击之后也是如此。我正在尝试AlarmManager.cancel类,但它无法正常工作。文档说如果意图与用于设置警报的意图相同,那么它将取消它。所以,我使用这段代码取消它:

String[] spCANCELS = intent_ids.split(";");

                //Cancel all previous set alarms
                for(int i = 0; i < spCANCELS.length; i++) {
                    try {
                        if(!spCANCELS[i].equals("")) {
                            int time = Integer.valueOf(spCANCELS[i]);
                            Intent intent = new Intent(Hop_Timer.this, Alarm_Receiver.class);
                            intent.putExtra("alarm_message", "Time for your " + spCANCELS[i] + " min addition!");
                            PendingIntent sender = PendingIntent.getBroadcast(Hop_Timer.this, time, intent, PendingIntent.FLAG_ONE_SHOT);
                            AlarmManager am = (AlarmManager) Hop_Timer.this.getSystemService(Context.ALARM_SERVICE);
                            am.cancel(sender);
                        }
                    } catch (Exception e) {
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                }
                //All clear!
唉,警报不断发生。我通过相隔5秒放入10个不同的警报进行测试。我让前3或4个闹钟关闭,然后按下我的取消按钮,但警报仍在继续(当所有字段清除时,点击内部,所以我知道点击监听器正在工作)。

编辑:没关系,我在查看语法时需要多加注意。这一行:intent_ids + =“intent_id;”;不应该在引号中使用变量intent_id。

1 个答案:

答案 0 :(得分:0)

没关系,我在查看语法时需要多加注意。这一行:intent_ids + =“intent_id;”;不应该在引号中使用变量intent_id。