我的应用与BLE外设通话。有时,应用程序启动时已连接该外围设备。我可以通过调用以下方式检索设备:
BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
List<BluetoothDevice> connectedDevices = manager.getConnectedDevices(BluetoothProfile.GATT);
然后我可以根据地址或UUID过滤connectedDevices。但是,BluetoothDevice没有断开连接方法。要断开连接,我需要一个BluetoothGATT实例。但我能看到获得BluetoothGATT实例的唯一方法是致电
connectedDevice.connectGatt(Context, boolean, BluetoothGattCallback)
这需要很长时间。除此之外,我在调用connectGatt后回来的BluetoothGatt实例在调用disconnect()时似乎并没有实际断开外围设备。
所以我的问题是:
谢谢
答案 0 :(得分:0)
有时应用程序是在已经连接的外围设备的情况下启动的。
这意味着其他一些应用程序连接到外围设备。当然,您无法断开某些其他应用的连接。连接外围设备的应用程序也必须断开连接。
答案 1 :(得分:0)
对于我的项目,我找到了这个解决方法,不知道它是否是最好的解决方案,但也许它可以帮助某人。
声明一个 BluetoothGatt 列表:
List<BluetoothGatt> gattList = new ArrayList<>();
在 OnConnectionStateChange 中,每次连接新设备时,将他的 gatt 对象添加到列表中:
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
if (newState == BluetoothProfile.STATE_CONNECTED) {
gattList.add(gatt) ;
}
}
使用像这样的函数使用 BluetoothDevice 地址(更容易检索)获取 gatt 对象:
public BluetoothGatt getGattFromAddress(String address) {
BluetoothGatt gatt = null ;
for(int i=0; i<gattList.size(); i++) {
if(address.equals(gattList.get(i).getDevice().getAddress()))
gatt = gattList.get(i);
}
return gatt ;
}
执行 gatt 操作:
getGattFromAddress(bleDeviceAddress).disconnect();