广播接收者冲突
BroadcastReceiver Conflict
我目前正在尝试通过同一 activity 中的不同片段管理 2 个不同的低功耗蓝牙外围设备。
我目前遇到的问题是广播接收器在两个片段中由同一个外围设备触发。
两个片段都有不同的 类 和方法名称,因为我假装对传入数据执行不同的操作。
这是 BroadcastReceiver 方法:
private final BroadcastReceiver mGattUpdateReceiver2 = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("OnReceive2");
final String action = intent.getAction();
if (BluetoothLeServiceHeart.ACTION_GATT_CONNECTED.equals(action)) {
mConnected2 = true;
updateConnectionState(R.string.connected);
} else if (BluetoothLeServiceHeart.ACTION_GATT_DISCONNECTED.equals(action)) {
mConnected2 = false;
updateConnectionState(R.string.disconnected);
clearUI();
} else if (BluetoothLeServiceHeart.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
displayGattServices2(mBluetoothLeService2.getSupportedGattServices());
} else if (BluetoothLeServiceHeart.ACTION_DATA_AVAILABLE.equals(action)) {
displayData(intent.getStringExtra(BluetoothLeServiceHeart.EXTRA_DATA));
}
}
};
我想我的问题是,我是否应该为每个人设置不同的 BroadcastReceiver
?如果是这样,我将如何解决它。还是我从根本上做错了什么?
您应该只创建 1 个 BroadcastReceiver
class。如果您需要区分来自 fragment1 和 fragment2 的调用,您可以将 extra 添加到调用意图中。例如:
// fragment1
intent.putExtra("key","fragment1");
context.sendBroadcast(intent);
// fragment2
intent.putExtra("key","fragment2");
context.sendBroadcast(intent);
然后 onReceive
:
String value = getIntent().getExtras().getString("key");
if (value.equals("fragment1") {
// called from fragment1
} else {
// called from fragment2
}
我目前正在尝试通过同一 activity 中的不同片段管理 2 个不同的低功耗蓝牙外围设备。
我目前遇到的问题是广播接收器在两个片段中由同一个外围设备触发。
两个片段都有不同的 类 和方法名称,因为我假装对传入数据执行不同的操作。
这是 BroadcastReceiver 方法:
private final BroadcastReceiver mGattUpdateReceiver2 = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("OnReceive2");
final String action = intent.getAction();
if (BluetoothLeServiceHeart.ACTION_GATT_CONNECTED.equals(action)) {
mConnected2 = true;
updateConnectionState(R.string.connected);
} else if (BluetoothLeServiceHeart.ACTION_GATT_DISCONNECTED.equals(action)) {
mConnected2 = false;
updateConnectionState(R.string.disconnected);
clearUI();
} else if (BluetoothLeServiceHeart.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
displayGattServices2(mBluetoothLeService2.getSupportedGattServices());
} else if (BluetoothLeServiceHeart.ACTION_DATA_AVAILABLE.equals(action)) {
displayData(intent.getStringExtra(BluetoothLeServiceHeart.EXTRA_DATA));
}
}
};
我想我的问题是,我是否应该为每个人设置不同的 BroadcastReceiver
?如果是这样,我将如何解决它。还是我从根本上做错了什么?
您应该只创建 1 个 BroadcastReceiver
class。如果您需要区分来自 fragment1 和 fragment2 的调用,您可以将 extra 添加到调用意图中。例如:
// fragment1
intent.putExtra("key","fragment1");
context.sendBroadcast(intent);
// fragment2
intent.putExtra("key","fragment2");
context.sendBroadcast(intent);
然后 onReceive
:
String value = getIntent().getExtras().getString("key");
if (value.equals("fragment1") {
// called from fragment1
} else {
// called from fragment2
}