2011-05-16 17 views
5

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.

+2

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

Respuesta

0

BluetoothHeadset es un objeto proxy para controlar el servicio Bluetooth Headset a través de IPC.

Utilice getProfileProxy (Context, BluetoothProfile.ServiceListener, int) para obtener el objeto proxy BluetoothHeadset. Utilice closeProfileProxy (int, BluetoothProfile) para cerrar la conexión del servicio.

Android solo admite un auricular Bluetooth conectado a la vez. Cada método está protegido con su permiso correspondiente.

fuente: http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html

+0

Como dije en la pregunta original, esto debe funcionar en APIs anteriores (2.2 y superiores), es por eso que necesitaba acceder a los métodos privados no en la API – user496854

+0

. Además, solucioné el problema que tenía originalmente sin tener que invocar esas API, por lo que técnicamente hablando, esta pregunta ya no es relevante – user496854

+2

Hola usuario496854, ¿cómo resolvió el problema sin llamar a API privadas? Estoy enfrentando el mismo problema – George

Cuestiones relacionadas