2

次のコードを実行するアクティビティがあります (時間と間隔が定義されています)。

Intent buzzIntent = new Intent(getBaseContext(), BuzzReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
buzzIntent.putExtra("interval", interval);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval * 60 * 1000, pendingIntent);

および次の onReceive を持つ BroadcastReceiver:

@Override
public void onReceive(Context context, Intent intent) {
    try {
        int interval = intent.getIntExtra("interval", -1);
        <... more code ...>
    } catch (Exception e) {
        e.printStackTrace();
    }
}

しかし、intent.getIntExtra() は -1 を返します (これは、Activity の interval の値ではないことを確認しました)。そのため、何らかの理由で、BroadcastReceiver は、Activity のインテントに保存したエクストラを取得していません。

私はたくさんのことを試しましたが、何もうまくいかないようです。ここで何か不足していますか?

4

3 に答える 3

18

以下のように、保留中のインテントを作成するときにフラグFILL_IN_DATAを設定します。

PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, Intent.FILL_IN_DATA);

この変更後、放送受信機でエキストラを受信する必要があります。

于 2011-10-15T15:18:43.500 に答える
1

に渡すbuzzIntent.putExtra() 前に電話をかけてみbuzzIntentましたPendingIntent.getBroadcast()か?

于 2011-08-10T01:07:21.437 に答える
0

次のコードを試してください

Bundle bundle = intent.getExtras();
int interval= bundle.getInt("interval", -1);

それ以外の

int interval = intent.getIntExtra("interval", -1);
于 2011-03-07T05:34:19.097 に答える