我有一個奇怪的情況與AlarmManager。我正在使用AlarmManager安排一個事件,並使用intent.putExtra傳入一個字符串。該線是無聲的或振動的,當接收器發射時,手機應該轉動振鈴器或設置振動。日誌語句每次正確輸出期望值。Intent.putExtras不一致
Intent intent;
if (eventType.equals("start")) {
intent = new Intent(context, SReceiver.class);
} else {
intent = new Intent(context, EReceiver.class);
}
intent.setAction(eventType+Long.toString(newId));
Log.v("EditQT",ringerModeType.toUpperCase());
intent.putExtra("ringerModeType", ringerModeType.toUpperCase());
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);
時,將觸發報警還執行接收器具有日誌語句,我可以看到在第一時間圍繞該語句輸出期望的字符串或者靜音或振動模式,但對每個後續執行的輸出顯示的原始值在接收端。執行警報,然後將putExtra的值更改爲反向字符串,並且接收方仍然顯示以前的值事件,儘管上面的代碼調用顯示新值已傳入.setAction的值每次都是相同的。
audioManager = (AudioManager) context.getSystemService(Activity.AUDIO_SERVICE);
Log.v("Start",intent.getExtras().get("ringerModeType").toString());
if (intent.getExtras().get("ringerModeType").equals("SILENTMODE")) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
} else {
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}
有什麼想法?
這是否意味着即使發生在過去的意圖,系統仍然知道呢? – JDM 2010-05-16 22:10:42
只要手機未關閉並重新啓動,似乎就可以工作。如果發生這種情況,然後使用FLAG_UPDATE_CURRENT再次調用意圖,那麼該事件不會被調度。有沒有辦法來檢查意圖是否存在於當前狀態? – JDM 2010-05-16 22:38:22
「這是否意味着即使意圖發生在過去,系統仍然知道它?」是的,除非你使用'FLAG_ONE_SHOT'。 「有沒有辦法來檢查意圖是否存在於當前狀態?」不,但是請嘗試使用「FLAG_CANCEL_CURRENT」或「FLAG_ONE_SHOT」,然後根據您如何使用「PendingIntents」進行操作。 – CommonsWare 2010-05-16 23:17:14