广播接收器类和 registerReceiver 方法 [英] Broadcast Receiver class and registerReceiver method

查看:50
本文介绍了广播接收器类和 registerReceiver 方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试了解广播接收器,我浏览了许多示例代码,但仍有一些疑问.我想知道什么时候必须扩展 Broadcast Receiver 类,什么时候应该使用 registerReceiver() 方法,什么时候应该为 BroadcastReceiver 创建对象.在某些程序中,我遇到了使用 registerReceiver 方法但没有扩展广播接收器类的情况.我还想知道如何调用 onReceive 方法.

Hi i am trying to understand Broadcast Receiver , i went through many sample codes , but still have some doubts. I wanted to know when we have to extend the Broadcast Receiver class and when should we use registerReceiver() method and when should we create object for BroadcastReceiver. In some programs i came across registerReceiver methods being used but without extending the Broadcast Receiver class. I also wanted to know how the onReceive method gets called.

什么时候应该使用哪种方法?

Which approach should be used when?

这里是 registerReceiver 方法:

registerReceiver(new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode()) {
                ........
                }

            }

        }, new IntentFilter(SENT));

正在为 BroadcastReceiver 创建的对象:

Object being created for BroadcastReceiver:

private BroadcastReceiver intentReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        .................
    }

};

推荐答案

Android 有 广播接收器的意图动作.BroadCast 接收器 会在它侦听在其中注册的任何操作时触发.

Android has intent action for broadcast receiver. BroadCast receiver will be trigger when it listen any action which registered within it.

现在我们举一个例子:我们需要监听每当任何蓝牙设备连接到我们的设备时"的动作.对于那个 android 有它修复操作 android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED

Now we will take one example : That we need to listen the action of "whenever any bluetooth device connect to our device". For that android has it fix action android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED

所以你可以通过 manifest & 获取它也注册

So you can get it via manifest & registration also

通过清单注册:

把它放在你的清单中

<receiver android:name="MyBTReceiver">
    <intent-filter>
                <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED" />
      </intent-filter>
</receiver>

创建MyBTReceiver.class

public class MyBTReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if(intent.getAction().equals("android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED")){
            Log.d(TAG,"Bluetooth connect");
        }
    }
}

那是最简单的广播接收器.

That was the simplest broadcast Receiver.

现在,如果您只对在运行时接收广播感兴趣,最好使用 registerReceiver().你也可以 注册它在您现有的类文件中.您还需要取消注册onDestroy().在这里,除了活动注册之外,您不需要清单中的任何广播注册

Now, if you are only interested in receiving a broadcast while you are running, it is better to use registerReceiver(). You can also register it within your existing class file. you also need to unregister it onDestroy(). here, you dont need any broadcast registration in manifest except activity registration

例如

public class MainActivity extends Activity {

    IntentFilter filter1;

    @Override
    public void onCreate() {
        filter1 = new IntentFilter("android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED");
        registerReceiver(myReceiver, filter1);
    }

    //The BroadcastReceiver that listens for bluetooth broadcasts
    private final BroadcastReceiver myReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equalsIgnoreCase("android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED")) {
                Log.d(TAG,"Bluetooth connect");
            }
        }
    };

    @Override
    public void onDestroy() {
        unregisterReceiver(myReceiver);
    }
}

这篇关于广播接收器类和 registerReceiver 方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆