Android BLE:如何检查绑定的BLE设备是否可用于连接

时间:2015-10-24 11:13:36

标签: android bluetooth-lowenergy

我目前正在测试BLE的葡萄糖谱。为了获得葡萄糖记录,必须首先粘合BLE葡萄糖计。设备绑定后,我在执行onLeScan时在startLeScan回调中不再使用此设备。

但是我可以使用BluetoothAdapter.getDefaultAdapter().getBondedDevices();

获取所有绑定BLE设备的列表

现在我想过滤目前在范围/可用设备中的绑定设备。

1 个答案:

答案 0 :(得分:3)

要检查是否有范围/可用的设备需要扫描,因此,如果您说它们由于某种原因未被检测到,则不适合您。

因此,您可以尝试通过了解Adress或Name来直接连接到绑定设备。

    Set<BluetoothDevice> myBondedDevices = mBluetoothAdapter.getBondedDevices();
    String MAC = "your device Adress"
    for(BluetoothDevice mydevice:myBondedDevices ){
        Log.i("BondedInfo", MAC + "   " + mydevice.getAddress());
        if(mydevice.getAddress().equals(MAC)){
            mydevice.connectGatt(mycontext,true,mygattcallback);
            break;
        }

    }

或者最充分的近似(根据我自己):

  • 实现一个检测绑定的广播接收器,并在设备绑定完成时进行连接:

        BroadcastReceiver myServiceBroadcast = new BroadcastReceiver() {
    
        @Override
        public void onReceive(Context context, Intent intent) {
    final int state=intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,BluetoothDevice.ERROR);
    
        switch(state){
            case BluetoothDevice.BOND_BONDING:
                Log.i("Bondind Status:"," Bonding...");
                break;
    
            case BluetoothDevice.BOND_BONDED:
                Log.i("Bondind Status:","Bonded!!");
                myBluetoothDevice.connectGatt(mycontext, true, myBluetoothGattCallBack);
                break;
    
            case BluetoothDevice.BOND_NONE:
                Log.i("Bondind Status:","Fail");
    
                break;
        }     
    };
    
  • 正确注册:

    registerReceiver(myServiceBroadcast,new IntenFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));