2012-03-08 86 views
1

我有一個應用程序,有一個報警系統,工作flawleslesly,我複製所有5類,只是改變數據庫名稱,但它; s不工作,我可以通過你所有的代碼,但我想聽聽有沒有人有過這樣的事情。Androids AlarmManager不會觸發鬧鐘

當我調用新的ReminderManager(this).setReminder(mRowId,mCalendar);

rowID已滿(有些數字)和mCalendar(有一個日期,我與另一個應用程序的Mcalendar的日期相比,它是相同的格式),當我打電話時,它應該createse掛起的意圖

public void setReminder(Long taskId, Calendar when) 
{ 
    Intent i= new Intent(mContext,OnAlarmReciver.class); 
    i.putExtra(DatabaseIN.KEY_ROWID,(long)taskId); 


    PendingIntent pi=PendingIntent.getBroadcast(mContext,0, i, PendingIntent.FLAG_ONE_SHOT); 
    mAlarmManager.set(AlarmManager.RTC_WAKEUP,when.getTimeInMillis(),pi); 

} 
after this nothing happens... can anyone help 

回答

0

嘗試清潔烏爾項目 - >乾淨,如果不幫助建立一個新的項目,並另起爐竈寫clases ..這爲我工作:d

+1

謝謝,真的幫了我 – Tony 2012-03-11 13:11:30

0

也許when還沒有發生(太遙遠的將來),或者它已經發生(在過去你的電話之前set())。

或者,您的清單中可能沒有定義OnAlarmReceiver

+0

我有它 <活動 機器人:label =「@ string/app_name」 android:name =「.AnAlarmReciver」/> Tony 2012-03-09 09:12:15

0

PendingIntent.getBroadcast將重新使用一個匹配的pendingIntent,因此它可能已經觸發了該待處理的意圖(例如,可能來自您複製的代碼),並且由於您使用的是FLAG_ONE_SHOT標誌,射擊一次。

快速測試是刪除FLAG_ONE_SHOT標誌,看看它是否觸發。如果這是問題,那麼只需在PendingIntent.getBroadcast中使用不同的請求代碼即可。

+0

我應該用什麼來代替FLAG_ONE_SHOT? – Tony 2012-03-09 09:24:34

+0

這取決於你想要完成的事情。如果你只想在你仍然可以使用該標誌的情況下觸發這個意圖,但是對於不同的意圖,請求代碼應該是不同的(現在你正在使用0,可能是多於一個警報,聽起來像)。如果您實際上不需要FLAG_ONE_SHOT,則不要使用標誌(即將其傳遞給0)。 – dule 2012-03-12 19:51:19