无法从AlarmManager取消PendingIntent

时间:2013-10-22 06:19:10

标签: java android alarmmanager

我是Android新手,我正在创建日期提醒应用程序,用户将输入日期,时间和消息,以便在输入的日期和时间通知时间。到目前为止,我已经实现了创建警报,显示通知,单击通知,打开应用程序以及该通知的详细信息,并在需要时更新,列出所有警报(我使用SqlLite存储数据)。

在我的报警列表页面上,点击项目,我显示AlertDialog框,其中包含删除选项,当我点击删除时,我正在从数据库中删除报警详细信息,但无法取消报警。

以下是2个类的代码,其中一个是我创建闹钟,另一个是我取消闹钟,不知道我错过了什么!!!!

Class CreateActivity extends Activity
methode setAlarm{
.....
        Intent myIntent = new Intent(this.getApplicationContext(), AlarmReciever.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        db = new DatabaseHandler(this);
        if(!isNotified) //create new alarm
        {
            Random random = new Random();
            alarmId  = random.nextInt(10000);
            pojo = new DateBookPojo(alarmId, inDate, inTime, inMsg);
            db.addReminder(pojo);
            System.out.println("Adding Reminder.");
        }else{ // Its from notification
            pojo = new DateBookPojo(alarmId, inDate, inTime, inMsg);
            db.updateReminder(pojo);
            System.out.println("Updating Reminder.");
        }

        myIntent.putExtra("alarmId", alarmId);

        pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), alarmId, myIntent,0);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
....
}

Here AlarmId is unique passed to PendingIntent

这是另一个列表活动,点击AlertDialog我将从数据库中删除警报并尝试取消警报管理器。在这里,我使用了相同的AlarmId,用于创建PendingIntent

Class MyListActivity extends ListActivity
....
private void deleteReminder(int alarmId) {
    System.out.println("alarmId= "+ alarmId);
    DatabaseHandler db = new DatabaseHandler(this);
    DateBookPojo pojo = new DateBookPojo();
    pojo.setReminderId(alarmId);
    db.deleteReminder(pojo); // delete alarm details from database
    System.out.println("Deleted Entry. = > " + alarmId);

    Intent myIntent = new Intent(this.getApplicationContext(), AlarmReciever.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), alarmId, myIntent,0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    System.out.println("Cancelled Alarm. = > " + alarmId);

    showList(); // Again show the new list.
}
我用google搜索& stackoverflow很多,但无处不在我看到这个解决方案工作正常,但它不适合我。

我想在此处注意到,Onlick of notification,我正在使用CreateActivity类来显示详细信息,并在更新时更新通知的警报。我想我正在弄乱与Intent& PendingIntent

请帮帮我。

2 个答案:

答案 0 :(得分:1)

添加:

myIntent.putExtra("alarmId", alarmId);

使用deleteReminder()方法(或将其从setAlarm中移除)。

要删除PendingIntent,必须完全匹配。

答案 1 :(得分:0)

参考这个。 Delete alarm from AlarmManager using cancel() - Android

根据提供的答案,删除方法中的pendingIntent应声明为

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), alarmId, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);