volver vincular una samsung reparar puedo porque funciona dispositivo conectar como celular bocina actualizar android bluetooth

android - una - porque no puedo vincular mi bluetooth



Conectarse programáticamente a un dispositivo Bluetooth emparejado (4)

De acuerdo, ya que esto me estaba volviendo loco, investigué un poco el código fuente y encontré una solución 100% confiable (al menos en mi Nexus 4, Android 4.3) para conectar a un dispositivo A2DP emparejado (como un auricular o dispositivo de audio Bluetooth). He publicado un proyecto de muestra completamente funcional (construido fácilmente con Android Studio) que puedes encontrar aquí en Github .

Esencialmente, lo que necesitas hacer es:

  • Obtener una instancia del BluetoothAdapter
  • Usando esta instancia, obtenga un proxy de perfil para A2DP:

adapter.getProfileProxy (context, listener, BluetoothProfile.A2DP);

donde el listener es un ServiceListener que recibirá un onServiceConnected() BluetoothProfile en su devolución de llamada onServiceConnected() (que se puede convertir en una instancia de BluetoothA2dp )

  • Utilice la reflexión para adquirir el método connect(BluetoothDevice) en el proxy:

Method connect = BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);

  • Encuentra tu BluetoothDevice :

String deviceName = "My_Device_Name"; BluetoothDevice result = null; Set<BluetoothDevice> devices = adapter.getBondedDevices(); if (devices != null) { for (BluetoothDevice device : devices) { if (deviceName.equals(device.getName())) { result = device; break; } } }

  • E invoca el método connect() :

connect.invoke(proxy, result);

Lo cual, al menos para mí, provocó una conexión inmediata del dispositivo.

¿Hay alguna forma, utilizando el SDK de Android, para conectarse mediante programación a un dispositivo Bluetooth ya emparejado?

En otras palabras: puedo acceder a Configuración -> Conexiones inalámbricas y redes -> Configuración de Bluetooth, y tocar el dispositivo (que aparece como "Conectado pero no conectado"), momento en el que se conectará. Me gustaría poder hacer esto mediante programación, pero no veo una manera de hacerlo.

Veo las opciones para crear un zócalo RFCOMM, y para un dispositivo SPP, asumo que también hará la parte de conexión, pero para un dispositivo A2DP, donde la transferencia de datos real será manejada por el sistema operativo en lugar de por Mi aplicación, creo que eso no es aplicable?


La mejor manera que encontré para resolver mi problema fue descubrir que puedo crear un botón que muestre la pantalla de configuración de Bluetooth. No me di cuenta de que podías hacer esto, o lo habría hecho desde el principio.

startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));


Si el dispositivo ya está emparejado, entonces puede usar

if(device.getBondState()==device.BOND_BONDED){ Log.d(TAG,device.getName()); //BluetoothSocket mSocket=null; try { mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e1) { // TODO Auto-generated catch block Log.d(TAG,"socket not created"); e1.printStackTrace(); } try{ mSocket.connect(); } catch(IOException e){ try { mSocket.close(); Log.d(TAG,"Cannot connect"); } catch (IOException e1) { Log.d(TAG,"Socket not closed"); // TODO Auto-generated catch block e1.printStackTrace(); } }

para el uso de MY_UUID

private static final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");

el fragmento de código anterior es solo para conectar su dispositivo a un dispositivo compatible con A2DP. Espero que funcione.