我使用
Android中的connectGatt()方法连接到BLE设备.这非常有效.
当我断开连接时,请使用以下内容:
private void disconnectDevice() { gatt.disconnect(); }
当我收到回调时,我会收尾.
private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt,int status,int newState) { switch (newState) { case BluetoothProfile.STATE_CONNECTED: Log.d("BLED-GATT","STATE_CONNECTED"); setUIConnectionStatus("Discover services on device...",Color.YELLOW); checkEnableAddButton(simpleTrackEditText.getText().toString()); gatt.discoverServices(); break; case BluetoothProfile.STATE_DISCONNECTED: Log.d("BLED-GATT","STATE_DISCONNECTED"); setUIConnectionStatus("Not Connected!",Color.RED); gatt.close(); break; default: Log.d("BLED-GATT","STATE_OTHER"); } } }
这是执行的,我在调用disconnectDevice()后无法再控制设备.设备本身似乎认为它仍然连接,因为我无法将其置于广播可见性模式(如果它已经有连接就会发生).但是,如果我终止应用程序并再次打开它,那么我可以将设备设置为广播模式.这告诉我应用程序未正确断开连接.
知道我错过了什么吗?
解决方法
问题是我在扫描期间多次连接到同一设备导致我的应用程序同时打开许多连接.添加!isConnected()解决了这个问题:
/** * Connects to the device. Does nothing if already connected. * @param macAddress the address of the device. */ private void connectDevice(String macAddress) { if (!isConnected()) { device = bluetoothAdapter.getRemoteDevice(macAddress); if (device == null) { this.sendToast("Device Not Available"); } else { Log.d("BLED","Connecting..."); gatt = device.connectGatt(this,true,gattCallback); } } }