2013-05-13 86 views
0

我看到有很多類似的問題,但我的警報信息存儲在數據庫中。通過調用deleteReminder,數據庫內的提醒被取消,看起來像這樣setRepeating不會從其他活動取消

public boolean deleteReminder(long rowId) { 

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


} 

這會刪除提醒,但不會報警。我試圖將其更改爲

public boolean deleteReminder(long rowId) { 

    new ReminderManager(this).cancelReminder(); 


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

} 

,並在我的ReminderManager活動增添了cancelReminder方法這樣

公共無效setReminder(龍任務id,日曆時,字符串spinInterval){ Log.e(TAG,spinInterval) ;

long l = Long.parseLong(spinInterval); 



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

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

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

public void cancelReminder(){ 

     Intent i = new Intent(mContext, OnAlarmReceiver.class); 
     PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT); 

     mAlarmManager.cancel(pi); 

    } 

但它沒有工作....你能告訴我正確的代碼,使報警停止重複?

+1

不確定這是否是問題,但您正在使用'FLAG_ONE_SHOT'而不是'FLAG_UPDATE_CURRENT'來取消'PendingIntent'。你有沒有試過做'FLAG_UPDATE_CURRENT'? – Karakuri 2013-05-13 21:31:05

+0

就是這樣。謝謝! – JeffK 2013-05-13 22:09:22

+0

很酷。我會把它放在一個答案中,以便爲其他人的利益做標記。 – Karakuri 2013-05-14 16:02:19

回答

1

使用PendingIntent.FLAG_UPDATE_CURRENT撥打PendingIntent.getBroadcast()。您發佈的代碼第二次使用PendingIntent.FLAG_ONE_SHOT