AlarmManager に奇妙な状況があります。AlarmManager でイベントをスケジュールし、intent.putExtra を使用して文字列を渡しています。弦は無音または振動のいずれかであり、受話器が発火すると、着信音を鳴らすか、電話を振動するように設定する必要があります。ログステートメントは、毎回期待される値を正しく出力します。
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 または VIBRATE のいずれかで出力することを初めて確認できますが、その後の実行ごとに、出力はレシーバー側で元の値を示します。アラームが実行され、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);
}
何かご意見は?