android - Broadcast Receiver 类和 registerReceiver 方法

标签 android android-broadcast

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

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

这是registerReceiver方法:

registerReceiver(new BroadcastReceiver() {

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

            }

        }, new IntentFilter(SENT));

正在为 BroadcastReceiver 创建的对象:

private BroadcastReceiver intentReceiver = new BroadcastReceiver() {

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

};

最佳答案

Android 有 intent action用于广播接收器。 BroadCast receiver当它监听其中注册的任何 Action 时将被触发。

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

所以你也可以通过 list 和注册来获取它

通过 list 注册:

把这个放在你的 list 中

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

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

现在, 如果您只对在运行时接收广播感兴趣,最好使用 registerReceiver()。您也可以register它在您现有的类文件中。你还需要 unregisteronDestroy()。 在这里,除了 Activity 注册外,您不需要在 list 中进行任何广播注册

例如

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

关于android - Broadcast Receiver 类和 registerReceiver 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18842517/

相关文章:

java - 错误找不到符号变量UTF_8 android studio

java - Kotlin/Java : Add multiple items to a Builder class that only allows one . 一次 add()

android - 如何在播放前在videoview中设置预览图像

android - 如何检测应用程序是否关闭

android - 关闭 GPS 时广播接收器被调用 2 次?

Android 广播接收器与服务

java - 在 Android 中创建可自动启动的广播接收器

android - 如何向 list 中的接收者发送自定义广播操作?

java - 停止当前音频文件以防止同时存在多个文件

android - Android:替换 fragment 后如何停止音乐?