BroadcastReceiver Conflict

时间:2018-03-30 03:18:15

标签: android android-fragments bluetooth-lowenergy android-broadcast

我目前正尝试在同一活动中通过不同的片段管理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 个答案:

答案 0 :(得分:1)

您应该只创建1个BroadcastReceiver课程。如果需要区分来自fragment1和fragment2的调用,可以将额外的内容添加到调用intent中。例如:

// 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
}