4

我有一个允许用户选择分钟池的应用程序。因此,他们可能会选择 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。

4

1 回答 1

0

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

于 2011-02-28T19:56:16.807 回答