Android 重复通知即使在被删除后仍会触发

Android Repeating Notifications Fire Even After Being Deleted

我已尝试进行 Android 提醒,但出了点问题;当我在我的应用程序中设置重复通知时,通知会一直触发,直到我卸载该应用程序(删除重复通知不会阻止它关闭)。考虑到这一点,当我删除它们时,我的提醒从数据库中删除。

我的重复闹钟也是这个问题。

我该怎么办?

这是我的部分代码:

//数据库中的删除查询class

public boolean deleteReminder(long rowId) {

    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

// 我如何在我的主菜单中删除提醒 activity

 @Override
public boolean onContextItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.menu_delete:
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        mDbHelper.deleteReminder(info.id);
        fillData(); // populate
        return true;
    }
    return super.onContextItemSelected(item);
}

ReminderManager.java

public class ReminderManager {

private Context mContext; 
private AlarmManager mAlarmManager;

public ReminderManager(Context context) {
    mContext = context; 
    mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
}

public void setReminder(Long taskId, Calendar when) {

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

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

    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), 60 * 1000, pi);
}
}

ReminderService.java

public class ReminderService extends WakeReminderIntentService {

public ReminderService() {
    super("ReminderService");
        }

@Override
void doReminderWork(Intent intent) {
    Log.d("ReminderService", "Doing work.");
    Long rowId = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID);

    NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    Intent notificationIntent = new Intent(this, ReminderEditActivity.class); 
    notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID, rowId); 

    PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 

    Notification note=new Notification(android.R.drawable.stat_sys_warning, getString(R.string.notify_new_task_message), System.currentTimeMillis());
    note.setLatestEventInfo(this, getString(R.string.notify_new_task_title), getString(R.string.notify_new_task_message), pi);
    note.defaults |= Notification.DEFAULT_SOUND; 
    note.flags |= Notification.FLAG_AUTO_CANCEL; 

    int id = (int)((long)rowId);
    mgr.notify(id, note); 


}
}

OnAlarmReceiver.java

public class OnAlarmReceiver extends BroadcastReceiver {

private static final String TAG = ComponentInfo.class.getCanonicalName(); 


@Override   
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "Received wake up from alarm manager.");

    long rowid = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID);

    WakeReminderIntentService.acquireStaticLock(context);

    Intent i = new Intent(context, ReminderService.class); 
    i.putExtra(RemindersDbAdapter.KEY_ROWID, rowid);  
    context.startService(i);

}
}

编辑

我的问题不是取消闹钟,我想知道为什么我什至在我的应用程序中删除了提醒,它们就一直响着。

您必须使用与调用 setRepeating 完全相同的 PendingIntent 来调用 AlarmManager.cancel(PendingIntent) 才能取消闹钟。

您应该取消您为重复警报创建的pendingIntent。编写类似于 buttonclick 的代码来执行

AlarmManager.cancel(待定意向)

确保您提供的未决事件与您在设置中使用的事件相同。否则与提供的匹配的其他 pendingIntent 将被取消。