广播接收器类和 registerReceiver 方法 [英] Broadcast Receiver class and registerReceiver method
问题描述
我正在尝试了解广播接收器,我浏览了许多示例代码,但仍有一些疑问.我想知道什么时候必须扩展 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屋!