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

あなたの質問は6 時間前に尋ねられました。

PendingIntents異なるエクストラを同時に複数持つ場合は、上記のリンク先の問題で説明されているIntentsように、アクション文字列や など、内の何かを変更する必要があります。Uri

1 度に 1 つしか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(Intent intent):

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