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.

One Solution collect form web for “Invocación de un método privado (no publicado) en la API de Android”

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

  • ¿Debo dejar el hack de reflexión bluetooth en código de producción?
  • Obtener "java.lang.reflect.InvocationTargetException" al intentar registrar receptor de difusión de apk incrustado
  • Android / Java: ¿Llamar a un método usando reflexión?
  • Recuperación de una lista de clases de un paquete en un proyecto de Android
  • Java / Android Método de llamada desde cadena WITH Value
  • Android, ¿cómo borrar la lista de tareas recientes que podría obtener desde el botón Inicio en la mayoría de teléfono? ¿La reflexión es una manera posible?
  • ¿Cómo se crea una instancia de la actividad de Android (con reflexión)?
  • Android: cambiar el campo final estático privado usando la reflexión de java
  • ¿Es posible cargar dinámicamente una biblioteca en tiempo de ejecución desde una aplicación de Android?
  • Android Bluetooth no puede conectarse a dispositivos médicos con puerto fijo # - ¿utilizar reflexión de Java?
  • ¿Se puede usar la reflexión con métodos que pertenecen a un sdk mayor que el mínimo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.