studio por dispositivos detectar conectar con bluetoothadapter app android android-bluetooth

por - ¿Cómo saber programáticamente si un dispositivo Bluetooth está conectado?(Android 2.2)



conectar android studio con arduino por bluetooth (3)

Entiendo cómo obtener una lista de dispositivos vinculados, pero ¿cómo puedo saber si están conectados?

Debe ser posible ya que los veo listados en la lista de dispositivos Bluetooth de mi teléfono y establece su estado de conexión.


En mi caso de uso, solo quería ver si un auricular Bluetooth está conectado para una aplicación VoIP. La siguiente solución funcionó para mí:

public static boolean isBluetoothHeadsetConnected() { BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled() && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED; }

Por supuesto, necesitarás el permiso de Bluetooth:

<uses-permission android:name="android.permission.BLUETOOTH" />


Muchas gracias a Skylarsutton por su respuesta. Estoy publicando esto como respuesta a la suya, pero como estoy publicando código, no puedo responder como comentario. Ya he votado por encima de su respuesta, así que no estoy buscando ningún punto. Solo pagándolo.

Por alguna razón, BluetoothAdapter.ACTION_ACL_CONNECTED no pudo ser resuelto por Android Studio. Tal vez fue desaprobado en Android 4.2.2? Aquí hay una modificación de su código. El código de registro es el mismo; el código del receptor difiere ligeramente. Lo uso en un servicio que actualiza una bandera conectada por Bluetooth que otras partes de la aplicación hacen referencia.

public void onCreate() { //... IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED); IntentFilter filter2 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED); IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED); this.registerReceiver(mReceiver, filter1); this.registerReceiver(mReceiver, filter2); this.registerReceiver(mReceiver, filter3); } //The BroadcastReceiver that listens for bluetooth broadcasts private final BroadcastReceiver BTReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { //Do something if connected Toast.makeText(getApplicationContext(), "BT Connected", Toast.LENGTH_SHORT).show(); } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { //Do something if disconnected Toast.makeText(getApplicationContext(), "BT Disconnected", Toast.LENGTH_SHORT).show(); } //else if... } };


Utilice los filtros de intención para escuchar las transmisiones ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECT_REQUESTED y ACTION_ACL_DISCONNECTED:

public void onCreate() { ... IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); this.registerReceiver(mReceiver, filter); } //The BroadcastReceiver that listens for bluetooth broadcasts private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (BluetoothDevice.ACTION_FOUND.equals(action)) { ... //Device found } else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { ... //Device is now connected } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { ... //Done searching } else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) { ... //Device is about to disconnect } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { ... //Device has disconnected } } };

Algunas notas:

  • No hay forma de recuperar una lista de dispositivos conectados al inicio de la aplicación. La API de Bluetooth no le permite CONSULTAR, sino que le permite escuchar CAMBIOS.
  • Un repaso al problema anterior sería recuperar la lista de todos los dispositivos conocidos / emparejados ... luego tratar de conectarse a cada uno (para determinar si está conectado).
  • Alternativamente, podría hacer que un servicio en segundo plano mire la API Bluetooth y escriba los estados del dispositivo en el disco para que su aplicación los use en una fecha posterior.