Intent.putExtras不一致

JDM*_*JDM 2 android alarmmanager android-intent

我对AlarmManager有一个奇怪的情况.我正在使用AlarmManager安排一个事件,并使用intent.putExtra传入一个字符串.弦是静音或振动的,当接收器发出电话时,应该转动振铃器或将手机设置为振动.log语句每次都正确输出预期值.

        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);
Run Code Online (Sandbox Code Playgroud)

在警报执行时触发的接收器也有一个日志语句,我可以看到第一次该语句输出预期的字符串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);
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Com*_*are 7

六个小时前你问了这个问题.

如果你有多个PendingIntents同时使用不同的额外内容,你将需要改变其他内容Intents,如动作字符串或Uri,如上面链接问题中所述.

如果您一次只有一个PendingIntent,但您的额外费用可能会有所不同,只需FLAG_UPDATE_CURRENT在您的电话中使用即可getBroadcast().