Invocar un método privado (inédito) en la API de Android
Necesito verificar qué auriculares BT están actualmente conectados (no solo emparejados) en OS 2.0 - 2.3. Dicha 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/BluetoothHeadse. 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 errorjava.lang.IllegalArgumentException: object is not an instance of the class
.
Tengo una lista de dispositivos emparejados usandoBluetoothDevice.getBondedDevices()
, y trato de usar laisConnected()
método 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;
}
Recibo la excepción en la línea que invoca el método, pero no estoy seguro de qué estoy haciendo mal.