2

我对 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);
}

有什么想法吗?

4

2 回答 2

7

你的问题是在六个小时前被问到的。

如果您将PendingIntents同时拥有多个具有不同附加功能的内容,则需要更改 中的其他内容Intents,例如操作字符串或Uri,如上面链接到问题中所述。

如果您一次只有一个PendingIntent,但您的额外费用可能会有所不同,FLAG_UPDATE_CURRENT请在调用getBroadcast().

于 2010-05-16T21:51:44.507 回答
1

多个 PendingIntents:

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

然后,onNewIntent(意图意图):

String text = intent.getData().toString();
于 2010-10-31T10:07:57.407 回答