Necesito comprobar qué auriculares BT están actualmente conectados (no solo emparejados) en OS 2.0 - 2.3. Tal funcionalidad no existe hasta API versión 11, donde se introdujo una clase de Auriculares Bluetooth. Pero ya existía una clase llamada BluetoothHeadset en API anteriores, pero no era de acceso público. Aquí está la documentación para ello: http://www.kiwidoc.com/java/l/x/android/android/9/p/android.bluetooth/c/BluetoothHeadset. Entonces, estaba tratando de usar la reflexión para invocar el método "isConnected", pero soy bastante horrible en la reflexión, y obtengo un error java.lang.IllegalArgumentException: object is not an instance of the class
.Invocar un método privado (no publicado) en Android API
Obtuve una lista de dispositivos emparejados usando BluetoothDevice.getBondedDevices()
, e intento utilizar el método isConnected()
en cada uno. Aquí está el código:
public boolean isBtDevConnected(BluetoothDevice btDev){
boolean connected = false;
try {
Class<?> BTHeadset = Class.forName("android.bluetooth.BluetoothHeadset");
Method isConnected = BTHeadset.getMethod("isConnected", new Class[] {BluetoothDevice.class});
connected = isConnected.invoke(BTHeadset, new Object[] {btDev});
}
}
} catch (Exception e) {
WriteToLog(e);
}
return connected;
}
consigo la excepción en la línea que invoca el método, pero no estoy seguro de lo que estoy haciendo mal.
creo que me di cuenta del problema - Tengo que llamar a invocar() sobre un objeto BluetothHeadset inicializado, no a la clase BluetothHeadset. Pero eso me lleva a otro problema: ¿cómo puedo inicializar un objeto Bluetooth Headset? – user496854