2010-05-16 70 views
2

我有一個奇怪的情況與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); 
} 

有什麼想法?

回答

7

您的問題被問到six hours ago

如果你將不得不在同一時間用不同的演員多PendingIntents,你將需要改變別的東西在Intents,像操作字符串或Uri,如鏈接到上面描述的問題。

如果您一次只有一個PendingIntent,但您的額外費用可能會有所不同,請在致電getBroadcast()時使用FLAG_UPDATE_CURRENT

+0

這是否意味着即使發生在過去的意圖,系統仍然知道呢? – JDM 2010-05-16 22:10:42

+0

只要手機未關閉並重新啓動,似乎就可以工作。如果發生這種情況,然後使用FLAG_UPDATE_CURRENT再次調用意圖,那麼該事件不會被調度。有沒有辦法來檢查意圖是否存在於當前狀態? – JDM 2010-05-16 22:38:22

+0

「這是否意味着即使意圖發生在過去,系統仍然知道它?」是的,除非你使用'FLAG_ONE_SHOT'。 「有沒有辦法來檢查意圖是否存在於當前狀態?」不,但是請嘗試使用「FLAG_CANCEL_CURRENT」或「FLAG_ONE_SHOT」,然後根據您如何使用「PendingIntents」進行操作。 – CommonsWare 2010-05-16 23:17:14

1

多PendingIntents:

Intent notificationIntent = new Intent(this, Oconf.class); 
notificationIntent.setData(Uri.parse("text")); 

然後,onNewIntent(意向意圖):

String text = intent.getData().toString();