0

我正在尝试从警报管理器中删除警报,该警报管理器正在使用挂起的意图进行广播,并且广播接收器用于捕获并执行该过程,正在调用 deleteReminder 函数,但是当时间到时意图仍在触发来了。如果代码中有问题,请告诉我。

public class ReminderManager {

private Context mContext;
private AlarmManager mAlarmManager;
private Intent i;

public ReminderManager(Context context) {
    mContext = context;
    mAlarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
}
public void setReminder(Long taskId, Calendar when) {

    System.out.println("setReminder Called");

    i = new Intent(mContext, Receiver.class);
    i.putExtra(Database.KEY_ROWID, (long) taskId);

    Toast.makeText(mContext, "setReminder" + Fragment.uniqueId,
            Toast.LENGTH_SHORT).show();
    PendingIntent pi = PendingIntent.getBroadcast(mContext,
            Fragment.uniqueId, i, PendingIntent.FLAG_ONE_SHOT);

    mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
}

public void deleteReminder(int uniqueID) {

    System.out.println("deleteReminder Called");
    i = new Intent(mContext, Receiver.class);
    i.putExtra(Database.KEY_ROWID, (long) uniqueID);

    Toast.makeText(mContext, "deleteReminder" + uniqueID,
            Toast.LENGTH_SHORT).show();

    PendingIntent.getBroadcast(mContext, uniqueID, i,
            PendingIntent.FLAG_UPDATE_CURRENT).cancel();
            mAlarmManager.cancel(PendingIntent.getBroadcast(mContext, uniqueID, i,
            PendingIntent.FLAG_UPDATE_CURRENT));
}
}
4

2 回答 2

0

我在 setReminder 函数中添加了一个布尔值来检查我是否要删除,并在警报管理器中添加或删除警报的 if 语句,它减少了代码的大小并且工作正常。

public class ReminderManager {

private Context mContext;
private AlarmManager mAlarmManager;
private Intent i;

// Constructor to set the context and set the alarmManager
public ReminderManager(Context context) {
    mContext = context;
    mAlarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
}

// used to create a pending intent using task id and Calendar object
public void setReminder(Long taskId, Calendar when, boolean delete) {

    System.out.println("setReminder Called");

    i = new Intent(mContext, OnAlarmReceiver.class);
    i.putExtra(NotesDatabase.KEY_ROWID, (long) taskId);

    Toast.makeText(mContext, "setReminder" + AddFragment.uniqueId,
            Toast.LENGTH_SHORT).show();
    // broadcast !! // change the
    PendingIntent pi = PendingIntent.getBroadcast(mContext,
            AddFragment.uniqueId, i, PendingIntent.FLAG_ONE_SHOT);

    if(delete == false){
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
    }else{
        pi.cancel();
        mAlarmManager.cancel(pi);
    }
}
于 2013-08-25T08:23:28.050 回答
0

This code works for me.

public void deleteReminder(int uniqueID) {

    System.out.println("deleteReminder Called");
    i = new Intent(mContext, Receiver.class);
    i.putExtra(Database.KEY_ROWID, (long) uniqueID);

    Toast.makeText(mContext, "deleteReminder" + uniqueID,
            Toast.LENGTH_SHORT).show();

    PendingIntent pi = PendingIntent.getBroadcast(mContext,
            Fragment.uniqueId, i, PendingIntent.FLAG_CANCEL_CURRENT);

    mAlarmManager.cancel(pi);

}
于 2013-08-25T07:48:07.890 回答