Отправить трансляцию только для определенного Activity

У меня есть одна Activity, которая создает BroadcastReceiver с IntentFilter в методе onCreate(...):

IntentFilter iFilter = new IntentFilter("action");

receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

    }
};

registerReceiver(receiver, iFilter);

С другой стороны находится IntentService, который должен отправлять некоторые данные:

Intent intent = new Intent(getApplicationContext(), receiver.class);
intent.setAction("action");

[...]

sendBroadcast(intent);

Но, похоже, это не работает. Broadcast не получен.
Мой класс обслуживания находится в библиотеке Android, возможно, это создает проблемы.

Спасибо за любые советы.


person CSchulz    schedule 14.07.2011    source источник
comment
Он должен работать. почему вы думаете, что это не работает. Неважно, находится ли он в библиотечном проекте, если вы ссылаетесь на свой библиотечный проект в своем основном проекте.   -  person Kumar Bibek    schedule 14.07.2011
comment
Я так не думаю. Я заметил это во время тестирования.   -  person CSchulz    schedule 14.07.2011
comment
Зарегистрируйте или распечатайте что-нибудь в методе onRecieve. Что говорит logcat?   -  person Kumar Bibek    schedule 14.07.2011
comment
Ничего не печатается и не регистрируется, что относится к Activity.   -  person CSchulz    schedule 14.07.2011


Ответы (2)


Просто создайте намерение своим действием.

Intent intent = new Intent("action");
[...]
sendBroadcast(intent);

И подумайте о том, чтобы переименовать «действие» во что-то более значимое, например «com.my.package.actions.SOME_ACTION».

Если вы хотите, чтобы компоненты вашего приложения получали широковещательную передачу, используйте:

  1. Зарегистрируйте разрешение в своем манифесте с уровнем защиты signature (и определите разрешение на использование для этого разрешения). Подробнее здесь.
  2. Используйте sendBroadcast(intent, permission) и укажите разрешение в 1.
person aromero    schedule 14.07.2011
comment
Есть названия более осмысленные. ;) Когда я использую этот способ, каждый может получить мою трансляцию, и это я хочу предотвратить. - person CSchulz; 14.07.2011
comment
Это идея трансляции события. Что вы имеете в виду под всеми? Ваши действия должны перестать слушать где-то в своем жизненном цикле, возможно, в методе onPause. - person aromero; 14.07.2011
comment
Я имею в виду, что Broadcast может быть получен с различными действиями, не только моими, не так ли? - person CSchulz; 14.07.2011
comment
Ох, хорошо. Да, они могут прослушивать ваши намерения, но им нужно знать название действия. - person aromero; 14.07.2011

если намерение находится только внутри вашего приложения, рассмотрите возможность использования LocalBroadcastManager

person android developer    schedule 27.01.2014