У меня странная ситуация с 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);
}
Любые мысли?
Означает ли это, что, несмотря на намерение имело место в прошлом система все еще знает об этом? – JDM
Это похоже на то, что телефон не выключается и не перезапускается. Если это произойдет, и затем вызов снова будет вызван с помощью FLAG_UPDATE_CURRENT, событие не будет запланировано. Есть ли способ проверить, существует ли намерение в его текущем состоянии? – JDM
«Означает ли это, что, хотя намерение произошло в прошлом, система все еще знает об этом?» Да, если вы не используете 'FLAG_ONE_SHOT'. «Есть ли способ проверить, существует ли намерение в его текущем состоянии?» Нет, но вместо этого попробуйте «FLAG_CANCEL_CURRENT'» или «FLAG_ONE_SHOT», а затем, в зависимости от того, как вы пытаетесь использовать «PendingIntents». – CommonsWare