Android-широковещательный приемник и фильтр намерений - PullRequest
7 голосов
/ 06 июля 2010

Я новичок в платформе Android. Пожалуйста, помогите мне, как ведет себя Broadcast Receiver и Intent Filter в Android. Пожалуйста, объясните в простой строке или с примером. Спасибо заранее

Ответы [ 3 ]

18 голосов
/ 06 июля 2010

Широковещательный приемник - это класс в вашем проекте Android, который отвечает за получение всех намерений, отправленных другими действиями с использованием android.content.ContextWreapper.sendBroadcast(Intent intent)

В файле манифеста о том, что вы получаете, вы должны указать класс вашего получателя, например:

<receiver android:name="xyz.games.pacman.network.MessageListener">
  <intent-filter>
    <action android:name="xyz.games.pacman.controller.BROADCAST" />
  </intent-filter>
</receiver>

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

Затем вы должны определить класс, который расширяет BroadcastReceiver. Это класс, который вы определили в файле манифеста:

public class MessageListener extends BroadcastReceiver {


    /* (non-Javadoc)
     * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
     */
    @Override
    public void onReceive(Context context, Intent intent) {
...
}

Здесь все намерения, которые проходят через фильтр, принимаются, и вы можете получить к ним доступ, используя параметр, переданный в вызове метода.

11 голосов
/ 05 января 2012

BroadcastReceiver можно зарегистрировать двумя способами: dynamic или static.Static - это не что иное, как объявление действия через intent-filter в AndroidManifest.xml для регистрации нового класса BroadcastReceiver .Динамический - это регистрация получателя из другого класса.intent-filter определяет, какое действие должно быть получено.

Чтобы создать BroadcastReceiver, необходимо расширить класс BroadcastReceiver и переопределить метод onReceive(Context,Intent).Здесь вы можете проверить входящее намерение с помощью Intent.getAction() и выполнить код соответствующим образом.

В качестве нового класса static будет иметь значение

public class Reciever1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        String str = intent.getAction();
        if(str.equalsIgnoreCase("HELLO1")) {
            Log.d("Abrar", "reciever....");             
            new Thread() {
                public void run() {                     
                    Log.d("Abrar", "reciever....");
                    System.out.println("Abrar");                        
                }
            }.start();                          
        }

или, если помещено в существующий класс, оновызывается динамически с

intentFilter = new IntentFilter();
intentFilter.addAction("HELLO1");

//---register the receiver---
registerReceiver(new Reciever1(), intentFilter);    
2 голосов
/ 10 июня 2017

BroadcastReceiver: «Шлюз», с помощью которого ваше приложение сообщает ОС Android, что ваше приложение заинтересовано в получении информации.

Intent-Filter: Работает с BroadcastReceiver и сообщает информацию «Что», в которой оно заинтересовано. Например, ваше приложение хочет получать информацию об уровне заряда батареи.

...