Cómo resolver el error onClientConnectionState () – status = 22 clientIf = 7 en BLE

Tengo una aplicación de Android que utiliza para conectar Bluetooth Low Energy (BLE) con mi teléfono. La aplicación funcionó bien en el teléfono casi como Galaxy S5 (Android 5.0.1), Galaxy S6 (Android 6.0). Sin embargo, tiene un problema crítico en Galaxy Nota 3 (Android 5.0.1).

Cuando llamo a la función connect() , y luego llamar a la readCharacteristic() , devuelve el error:

OnClientConnectionState () – status = 22 clientIf = 7

El error ocurre después de llamar a la función de connect unos 2 segundos. Busco una solución, como hacer un retraso antes de llamar a readCharacteristic() , pero no puede resolver.

¿Podría usted tener alguna manera de resolver mi problema?

Gracias a todos.

Este es mi código:

  private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { mBluetoothGatt.discoverServices(); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {} } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { try { Thread.sleep(500); readCharacteristic(); } catch (InterruptedException e) { e.printStackTrace(); } } else { Log.w(TAG, "onServicesDiscovered received: " + status); } } @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { } @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { } }; public void readCharacteristic() { /*check if the service is available on the device*/ BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("00001c00-d102-11e1-9b23-00025b00123")); /*get the read characteristic from the service*/ BluetoothGattCharacteristic mReadCharacteristic = mCustomService.getCharacteristic(UUID.fromString("00001233-d102-11e1-9b23-00025b00a5a5")); mBluetoothGatt.setCharacteristicNotification(mReadCharacteristic, true); BluetoothGattDescriptor descriptor = mReadCharacteristic.getDescriptor( UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG)); descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); mBluetoothGatt.writeDescriptor(descriptor); } 

Este es mi archivo de funciones de servicio completo para conectar BLE

 public class ConnectionService extends Service{ private BluetoothLeService mBluetoothLeService; public String mDeviceAddress="0A:1B:6C:22:11:3D"; private ServiceMonitor serviceMonitor = ServiceMonitor.getInstance(); private final ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder service) { mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService(); if (!mBluetoothLeService.initialize()) { Log.e(TAG, "Unable to initialize Bluetooth"); } mBluetoothLeService.connect(mDeviceAddress); } @Override public void onServiceDisconnected(ComponentName componentName) { mBluetoothLeService = null; } }; @Override public void onCreate() { super.onCreate(); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { if(mGattUpdateReceiver!=null) { unregisterReceiver(mGattUpdateReceiver); } if(mServiceConnection!=null) { unbindService(mServiceConnection); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { //If some device is connecting to phone, let disconnect if(mConnected==true) { mBluetoothLeService.disconnect(); } //If bluetooth is enable if (BleUtils.getBluetoothAdapter(getApplicationContext()).enable()) { Intent gattServiceIntent = new Intent(this, BluetoothLeService.class); bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE); registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter()); //Try to reconnect if the connect is not successful if (mBluetoothLeService != null) { new CountDownTimer(3000,1000) { public void onTick(long millisUntilFinished) {} public void onFinish() { final boolean result = mBluetoothLeService.connect(mDeviceAddress); Log.d(TAG, "Connect request result=" + result); } }.start(); } } return START_STICKY; } 

  • Android Ble desconexión de tiempo
  • Si se crea un vínculo con un dispositivo Bluetooth LE
  • Android 4.4.4 Moto G Bluetooth LE vuelve a conectar el problema
  • Android 4.3: BLE: Comportamiento de filtrado de startLeScan ()
  • Android BLE API: GATT Notificación no recibida
  • ¿Qué es "escritura confiable" en BLE?
  • BluetoothGatt writeCharacteristic devuelve false
  • StartLeScan con 128 UUIDs de bits no funciona en la implementación BLE de Android nativa
  • Cómo conectar un dispositivo Android a un dispositivo iOS a través de BLE (Bluetooth Low Energy)
  • Lea las notificaciones cuando toque el botón en el dispositivo BLE
  • Android, ¿Cómo puedo hacer que el dispositivo BLE esté conectado a un dispositivo (vinculado)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.