Передача аргументов BroadcastReceiver через намерение в Android

У меня есть приложение, которое устанавливает будильник с помощью 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 вместо этого?

Благодаря!

Iva

Solutions Collecting From Web of "Передача аргументов BroadcastReceiver через намерение в Android"

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

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

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

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

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

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

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

Какова проблема / ошибка, которую вы получаете? Экземпляр «arg1» Serializable?