studio samsung programar para instalar descargar curso celular aplicacion java android

samsung - java para android apk



Reflexión para acceder a funciones avanzadas de telefonía. (3)

¡Si es posible! ¡Pasé 24 horas investigando y descubriendo, y encontré una solución "fresca"!

// "cheat" with Java reflection to gain access to // TelephonyManager''s ITelephony getter Class c = Class.forName(tm.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); telephonyService = (ITelephony) m.invoke(tm);

Cualquier persona que quiera desarrollar su software de control de llamadas visita este punto de inicio:
http://www.google.com/codesearch/p?hl=en#zvQ8rp58BUs/trunk/phone/src/i4nc4mp/myLock/phone/CallPrompt.java&q=itelephony%20package:http://mylockforandroid%5C.googlecode%5C.com&d=0

Hay un proyecto. y hay comentarios importantes (y créditos).

En resumen: copie el archivo de ayuda, agregue permisos al manifiesto, copie y pegue la fuente para la administración de telefonía.

Más información para usted: solo puede enviar comandos AT si está rooteado. Luego puede detener el proceso del sistema y enviar comandos, pero necesitará un reinicio para permitir que su teléfono reciba y envíe llamadas.

¡Estoy muy feliz! ¡Ahora mi Shake2MuteCall recibirá una actualización!

Estoy tratando de usar la reflexión para acceder a algunas características no publicadas de la API de telefonía. Actualmente tengo problemas para crear una instancia de un objeto serviceManager que se necesita para obtener el servicio de "teléfono" como una carpeta que luego puedo usar para crear una instancia de un objeto de telefonía que se necesita para hacer una llamada, finalizar una llamada, etc.

Actualmente cuando hago la llamada

serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { new Binder() });

devuelve una nullPointerException. Creo que esto tiene que ver con crear una nueva carpeta en lugar de enviar la carpeta apropiada (de la cual no estoy seguro de cuál es la adecuada)

public void placeReflectedCall() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { String serviceManagerName = "android.os.IServiceManager"; String serviceManagerNativeName = "android.os.ServiceManagerNative"; String telephonyName = "com.android.internal.telephony.ITelephony"; Class telephonyClass; Class telephonyStubClass; Class serviceManagerClass; Class serviceManagerStubClass; Class serviceManagerNativeClass; Class serviceManagerNativeStubClass; Method telephonyCall; Method telephonyEndCall; Method telephonyAnswerCall; Method getDefault; Method[] temps; Constructor[] serviceManagerConstructor; // Method getService; Object telephonyObject; Object serviceManagerObject; String number = "1111111111"; telephonyClass = Class.forName(telephonyName); telephonyStubClass = telephonyClass.getClasses()[0]; serviceManagerClass = Class.forName(serviceManagerName); serviceManagerNativeClass = Class.forName(serviceManagerNativeName); Method getService = // getDefaults[29]; serviceManagerClass.getMethod("getService", String.class); Method tempInterfaceMethod = serviceManagerNativeClass.getMethod( "asInterface", IBinder.class); // this does not work serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { new Binder() }); IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone"); Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class); telephonyObject = serviceMethod .invoke(null, new Object[] { retbinder }); telephonyCall = telephonyClass.getMethod("call", String.class); telephonyEndCall = telephonyClass.getMethod("endCall"); telephonyAnswerCall = telephonyClass.getMethod("answerRingingCall"); telephonyCall.invoke(telephonyObject, number); }


Haciendo lo siguiente

Binder tmpBinder = new Binder(); tmpBinder.attachInterface(null, "fake"); serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { tmpBinder });

obtendrá una instancia de ServiceManagerProxy, luego el siguiente problema ocurre en la línea

telephonyCall.invoke(telephonyObject, number);


Tengo una solución. Cambio:

String serviceManagerName = "android.os.IServiceManager";

a:

String serviceManagerName = "android.os.ServiceManager";