我目前正在测试BLE的葡萄糖谱。为了获得葡萄糖记录,必须首先粘合BLE葡萄糖计。设备绑定后,我在执行onLeScan
时在startLeScan
回调中不再使用此设备。
但是我可以使用BluetoothAdapter.getDefaultAdapter().getBondedDevices();
现在我想过滤目前在范围/可用设备中的绑定设备。
答案 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));