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) { } } 
  • Notificación de baja energía del bluetooth
  • ¿Por qué la aplicación no se vuelve a conectar al dispositivo BLE cuando se configura autoConnect como true en Android?
  • Android Bluetooth Código de baja energía compatible con API> = 21 Y API <21
  • El dispositivo Android BLE recibe resultados extremadamente irregulares
  • Bluetooth: Transferencia de llamadas desde el teléfono Android de origen a un kit de desarrollo de audio de receptor?
  • Android: Envío de datos> 20 bytes by BLE
  • Leer paquete de publicidad en Android
  • Privado vs direcciones públicas en Bluetooth de baja energía en Android
  • Intervalo de tiempo de conexión BLE de Android
  • BluetoothGattServer cancelConnection no cancela la conexión
  • Cómo buscar dispositivos Bluetooth de baja energía usando la API bluez
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.