scanner - Android BLE ACTION_ACL_CONNECTED no llamado para dispositivo vinculado
libreria bluetooth android (1)
Estoy usando Android 4.4. Tengo 2 dispositivos Bluetooth, un Bluetooth de la vieja escuela y uno BLE. Ambos son idénticos funcionalmente en cuanto a los datos que transmiten. Ambos tienen un solo botón que conecta y transmite datos cuando se presionan.
Tengo permisos de Bluetooth activados y registro un BroadcastReceiver en mi manifiesto, como tal
...
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
<receiver
android:name=".BluetoothBroadcastReceiver">
<intent-filter>
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />
</intent-filter>
</receiver>
Para probar, simplemente estoy registrando las llamadas a onReceive en BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, intent.getAction());
}
Aquí está el problema: ambos dispositivos están emparejados con el teléfono, pero solo el dispositivo Bluetooth de la vieja escuela genera las transmisiones ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED cuando se presiona el botón del dispositivo Bluetooth. No ocurre nada cuando el dispositivo BLE intenta conectarse y transmitir.
Puedo conectar y recibir datos con éxito desde el dispositivo BLE si busco activamente conexiones BLE usando
mBluetoothAdapter.startLeScan(mLeScanCallback);
¿Debo escanear explícitamente los dispositivos BLE para que puedan conectarse? ¿Los dispositivos BLE generan difusiones ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED cuando no se escanean explícitamente los dispositivos BLE? ¿O deberían conectarse automáticamente si están vinculados al teléfono?
ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED
transmisiones ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED
solo son para BR / EDR (Bluetooth clásico), no para BLE.
Para BLE debe trabajar con las API y devoluciones de llamada proporcionadas por las versiones más recientes de Android.