2010-05-16 14 views
2

У меня странная ситуация с AlarmManager. Я планирую событие с AlarmManager и передавая строку, используя aim.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); 

приемник, который срабатывает, когда сигнал тревоги выполняет также заявление журнала, и я вижу в первый раз, что оператор выводит ожидаемую строку либо SILENT или вибрировать, но для каждого последующего исполнения на выходе показывает исходное значение на конце приемника. Тревога выполняется, а затем я меняю значение для 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 за один раз, но ваш дополнительный размер может отличаться, просто используйте FLAG_UPDATE_CURRENT в вашем телефоне getBroadcast().

+0

Означает ли это, что, несмотря на намерение имело место в прошлом система все еще знает об этом? – JDM

+0

Это похоже на то, что телефон не выключается и не перезапускается. Если это произойдет, и затем вызов снова будет вызван с помощью FLAG_UPDATE_CURRENT, событие не будет запланировано. Есть ли способ проверить, существует ли намерение в его текущем состоянии? – JDM

+0

«Означает ли это, что, хотя намерение произошло в прошлом, система все еще знает об этом?» Да, если вы не используете 'FLAG_ONE_SHOT'. «Есть ли способ проверить, существует ли намерение в его текущем состоянии?» Нет, но вместо этого попробуйте «FLAG_CANCEL_CURRENT'» или «FLAG_ONE_SHOT», а затем, в зависимости от того, как вы пытаетесь использовать «PendingIntents». – CommonsWare

1

Несколько PendingIntents:

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

Затем onNewIntent (Намерение Намерение):

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