您好,我正在尝试了解 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它在您现有的类文件中。你还需要 unregister它 onDestroy()
。
在这里,除了 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/