Invocación de un método privado (no publicado) en la API de Android

Necesito comprobar qué auriculares de BT están conectados actualmente (no apenas emparejado) en OS 2.0 – 2.3. Dicha funcionalidad no existe hasta la versión 11 de la API, en la que se introdujo una clase Bluetooth Headset. Pero ya existía una clase llamada BluetoothHeadset en las 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 . Por lo tanto, estaba tratando de utilizar la reflexión para invocar el método "isConnected", pero estoy bastante horrible en la reflexión, y estoy recibiendo un error java.lang.IllegalArgumentException: object is not an instance of the class .

Tengo una lista de dispositivos emparejados usando BluetoothDevice.getBondedDevices() , y trato de usar 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; } 

Tengo la excepción en la línea que invoca el método, pero no estoy seguro de lo que estoy haciendo mal.

BluetoothHeadset es un objeto proxy para controlar el servicio de auriculares Bluetooth vía IPC.

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

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

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

  • Android / Java: ¿Llamar a un método usando reflexión?
  • Cómo moverse repetición similar-variable en declaraciones if
  • Reflexión para un campo que va mal
  • Cómo acceder a setPreferredNetworkType en la fuente de Android
  • Soporte de la clase Robolectric de Android. Cómo tener las referencias de la clase de biblioteca R desde el proyecto de aplicación
  • Cargador de clases personalizado para android?
  • Clase personalizada que carga / reemplaza las clases nativas de Android
  • ¿Cómo obtengo el nombre del método dentro de ese método?
  • Error al usar StatusBarManagerService - java.lang.SecurityException en android.permission.STATUS_BAR_SERVICE
  • Field.getGenericType () devuelve la instancia de java.lang.Class en lugar de Type
  • Interceptar llamadas de método
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.