Передача аргументов в BroadcastReceiver через намерение в Android - PullRequest
9 голосов
/ 14 января 2010

У меня есть приложение, которое устанавливает будильник с помощью AlarmManager, которое запускает другое действие, когда оно отключается. AlarmManager принимает PendingIntent и порождает класс BroadcastReceiver, когда наступает указанное время. Мне интересно, есть ли способ передать аргументы этому BroadcastReceiver через объект Intent, который входит в PendingIntent?

В основном я хотел бы сделать что-то вроде этого:

Intent my_intent = new Intent(this, BroadcastService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, my_intent, 0);
my_intent.putExtra("arg1", arg1);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000), pendingIntent);

и я хотел бы иметь возможность получить arg1 в методе onReceive (Context, Intent) BroadcastReceiver. Я подумал, что локальная переменная my_intent будет вторым параметром, передаваемым в onReceive PendingIntent, но, видимо, это не совсем верно. Можно ли таким образом передавать параметры между Activity и BroadcastReceiver (используя Intent.putExtra ()) или вместо этого следует использовать ContentProvider?

Спасибо!

Ива

Ответы [ 4 ]

9 голосов
/ 20 октября 2010

У меня была похожая проблема, но я уже заполнил Intent сначала, прежде чем обернуть его в PendingIntent. Но ответ на мою проблему, как указывалось выше, заключался в том, что мне нужно было использовать флаг PendingIntent.FLAG_UPDATE_CURRENT. Как только я установил флаг, это сработало! Я надеюсь, что это помогает другим. -Джефф

5 голосов
/ 20 августа 2011
int code=1;
Intent i2 = new Intent(StartAlarm);
i2.putExtra("_id",code);

class test extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent arg1) {
        int i=arg1.getIntExtra("_id",-1);
    }
}
2 голосов
/ 14 января 2010

У меня есть приложение, которое устанавливает сигнал тревоги с помощью AlarmManager, который запускается другое действие, когда оно уходит.

Это плохая форма. Не выскакивайте без предупреждения такие действия без очень веских причин (например, входящий телефонный звонок). Что, если пользователь находится в процессе выполнения чего-либо, например TXTing, или играет в игру, или пытается набрать цифры для меню телефона?

Можно ли передать параметры между деятельностью и BroadcastReceiver таким образом (используя Intent.putExtra ())

Да. Однако имейте в виду, что вы захотите использовать PendingIntent.FLAG_UPDATE_CURRENT при создании PendingIntent, чтобы гарантировать, что все новые дополнения, которые вы предоставляете в Intent, действительно будут использованы.

1 голос
/ 14 января 2010

Да, я думаю, что можно передать любые данные базового типа Java и Serializable / Parceable типов в дополнениях Intent, обернутых вокруг PendingIntent, а затем извлечь их с помощью экземпляра Intent, переданного в onReceive Broadcastreceiver. Ваш подход мне подходит.

В чем проблема / ошибка, которую вы получаете? Является ли экземпляр arg1 сериализуемым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...