这种问题通常与连接延迟有关。您可以尝试在连接之后添加一个延迟,然后再执行discoverServices()。您还可以尝试在建立连接之前检查Gatt是否已经连接。
以下是一个示例代码:
private BluetoothGatt mGatt;
//连接设备 mGatt = device.connectGatt(this, false, gattCallback);
//建立Gatt回调函数 private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { //添加延迟 new Handler().postDelayed(new Runnable() { @Override public void run() { mGatt.discoverServices(); } }, 1000); //一秒钟的延迟 } }
@Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { //服务已发现 } else { //服务发现失败 } } };