如何使用RxAndroidBLE在BLE中创建绑定或配对

时间:2018-10-16 03:53:18

标签: android kotlin bluetooth-lowenergy rxandroidble

我想为连接设备实现密码或与BLE设备建立连接。我有 6个字节的密码,因此我们将如何使用RxAndroid库创建绑定或配对以及将密码发送到BLE设备。

任何人都可以为我提供参考或文档链接或演示链接,以实现密码或在建立连接时创建绑定或配对

提前谢谢!

1 个答案:

答案 0 :(得分:2)

首先,您需要找到附近的设备。

public void registerDeviceForAnyNEwDeviceFound() {
    // Register for broadcasts when a device is discovered.
    mBluetoothAdapter.startDiscovery();
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mSearchReceiver, filter);
    Log.e("STATUS", "" +
            mBluetoothAdapter.isDiscovering());
    isSearchReceiverRegistered = true;
}

// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver mSearchReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.e("SEARCH STARTED", "TRUE");
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Discovery has found a device. Get the BluetoothDevice
            // object and its info from the Intent.
            try {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress(); // MAC address
                Device mDevice = new Device();
                mDevice.setDeviceName(deviceName);
                mDevice.setDeviceAddress(deviceHardwareAddress);
                mDevice.setmBluetoothDevice(device);

                Log.e("Discovered DEVICE", deviceName);
                Log.e("BOND STATE", "" + device.getBondState());

                nearbyDeviceList.add(mDevice);
                mNearbyDeviceRecAdapter.notifyDataSetChanged();

            } catch (Exception e) {
                Log.e("EXCEPTION", e.getLocalizedMessage());
            }

        }
    }
};

然后,您需要注册另一个BroadCastReceiver,此接收器将监听与您要配对的设备的绑定变化。

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
            registerReceiver(mPairingReceiver, filter);

 private final BroadcastReceiver mPairingReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
            BluetoothDevice mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            //3 cases:
            //case1: bonded already
            if (mDevice.getBondState() == BluetoothDevice.BOND_BONDED) {
                Log.d(TAG, "BroadcastReceiver: BOND_BONDED.");
                Log.e(TAG, "BroadcastReceiver: BOND_BONDED." + mDevice.getName());
                mBluetoothAdapter.cancelDiscovery();

            }
            //case2: creating a bone
            if (mDevice.getBondState() == BluetoothDevice.BOND_BONDING) {
                Log.d(TAG, "BroadcastReceiver: BOND_BONDING.");
                Log.e(TAG, "BroadcastReceiver: BOND_BONDING." + mDevice.getName());
            }
            //case3: breaking a bond
            if (mDevice.getBondState() == BluetoothDevice.BOND_NONE) {
                Log.d(TAG, "BroadcastReceiver: BOND_NONE.");
                Log.e(TAG, "BroadcastReceiver: BOND_NONE." + mDevice.getName());
            }
        }
    }
};

最后,当您想与设备通话配对时:

mNearbyDeviceRecAdapter.getItemAtPosition(position).getmBluetoothDevice().createBond();

调用此语句后,它将启动与设备的配对。

希望!这会有所帮助。