我在android 5& android 6。 在HTC One A9,Moto x play,Moto G4
在后台设备扫描的这个完整过程中正在进行。
答案 0 :(得分:3)
这个问题可以通过不调用stopScan()方法来连接。 请参阅SoroushA的评论 Totally Disconnect a Bluetooth Low Energy Device
答案 1 :(得分:2)
您需要确保连接到设备不超过一次。我发现如果不添加自己的保护,您可能会无意中同时与一个设备(即存在多个BluetoothGatt对象)建立多个连接。您可以通过任何这些BluetoothGatt对象与设备通信,因此您不会在此时发现问题。但是当你试图断开连接时(错误地)将连接断开。
要消除此风险,您需要大致如下代码:
BluetoothGatt mBluetoothGatt;
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
if (device != null) {
Log.d(TAG, "LeScanCallback!!!! device " + device.getAddress());
boolean foundDevice = false;
if (device.getName() != null) {
Log.d(TAG, "LeScanCallback!!!! " + device.getName());
// Put your logic here!
if (device.getName().compareTo("YOUR_DEVICE") == 0) {
Log.d(TAG, "Found device by name");
foundDevice = true;
}
else {
Log.d(TAG,"Found " + device.getName());
}
}
if(mBluetoothGatt == null && foundDevice) {
mBluetoothGatt = device.connectGatt(getApplicationContext(), false, mGattCallback);
// Make sure to handle failure cases in your callback!
Log.d(TAG, "Stopping scan."); //Appropriate only if you want to find and connect just one device.
mBluetoothAdapter.stopLeScan(this);
}
}
}
};