2010-05-16 49 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();