Android – BLE vinculación programáticamente no funciona en todos CoolPad Nota 3

Estoy utilizando por debajo del receptor de difusión para coger la solicitud de enlace y vincularlo sin solicitud de popup de usuario.

private static BroadcastReceiver pairingBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(intent.getAction())) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR); Toast.makeText(context, "broadcast type "+type, Toast.LENGTH_LONG).show(); if (type == BluetoothDevice.PAIRING_VARIANT_PIN) { if(devicePin != null) { CommonStuff.Log("bond pin "+devicePin); Toast.makeText(context, "broadcast bond pin "+devicePin, Toast.LENGTH_LONG).show(); byte[] pin = new byte[10]; try { pin = (byte[]) BluetoothDevice.class.getMethod("convertPinToBytes", String.class) .invoke(BluetoothDevice.class, devicePin); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } /*for (int i=0; i< pin.length; i++) { CommonStuff.Log("byte bond pin "+pin[i]); }*/ device.setPin(pin); /*if(type == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION || type == 1) { device.setPairingConfirmation(true); }*/ abortBroadcast(); } } } else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction())) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE); if(state == BluetoothDevice.BOND_BONDING) return; if(state == BluetoothDevice.BOND_BONDED) { Toast.makeText(context, "Bond success", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "Bond failed", Toast.LENGTH_LONG).show(); } } } }; 

Suponga que devicePin se inicializa globalmente. Esto funciona para la mayoría de los teléfonos. Pero en la nota 3 de coolpad, conseguí el valor de BluetoothDevice.EXTRA_PAIRING_VARIANT como 1 . Y cuando intento enlazar este dispositivo usando setPin () sin considerar el valor de EXTRA_PAIRING_VARIANT , el enlace falla.

¿Alguien se enfrentó a este mismo problema? Por favor, ayúdame a solucionar esto.

One Solution collect form web for “Android – BLE vinculación programáticamente no funciona en todos CoolPad Nota 3”

BluetoothDevice.EXTRA_PAIRING_VARIANT como 1 indica que sólo el usuario puede introducir la clave de acceso. Pero programáticamente podemos establecer la contraseña usando un método privado llamado setpasskey .

Añada el código abajo como un else si el caso para el tipo en código antedicho

 else if(type == 1) { int pin = Integer.parseInt(devicePin); try { device.getClass().getMethod("setPasskey", int.class) .invoke(device, pin); abortBroadcast(); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } 
  • Análisis pasivo de Android BLE
  • Suscribirse a una notificación BLE Gatt Android
  • Notificación de baja energía del bluetooth
  • ¿Cómo obtener el nivel de la batería después de conectarse al dispositivo BLE?
  • API de conexiones cercanas de Google: mide la intensidad de la señal
  • Estado de Android Bluetooth 133 en gatt.readCharacteristic
  • Reemplazo de startLeScan a api actual
  • Android Bluetooth Scan para dispositivos clásicos y BTLE
  • Android BLE: recuperar el servicio UUID en la devolución de llamada onLeScan () cuando se anuncia desde iOS Peripheral
  • Bluetooth Bluetooth de bajo consumo de energía
  • Android BLE BluetoothGatt objeto permanece conectado y desencadena onCharacteristicChanged () incluso después de una llamada a desconectar ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.