2010-05-06 23 views
4

J'ai l'intention d'écrire des tests liés à l'écriture SIM directe et téléphonique.Comment puis-je accéder aux API privées Android qui n'apparaissent pas dans TelephonyManager?

Quelles sont les solutions de rechange au cas où les API nécessaires ne sont pas exposées dans TelephonyManager mais existe comme API privées dans PhoneBase.java, PhoneFactory.java ou CommandInterface.java?

Plus précisément, mes questions sont les suivantes:

  1. Quel est le "remplacement" pour: PhoneFactory.getDefaultPhone()? Quelle est l'alternative pour accéder au CommandsInterface

Merci à l'avance,
Micha

+0

Les appels API internes PhoneFactory que Micha est référait [peut être consulté ici] (http: // salut -android.info/src/com/android/internal/telephony/PhoneFactory.java.html). –

Répondre

6

Vous pouvez utiliser java reflection.

Voici comment j'accédé méthodes de com.android.internal.telephony.ITelephony classe pour bloquer un appel entrant ...

private void endCall() throws Exception { 
     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

     Class<?> c = Class.forName(tm.getClass().getName()); 
     Method m = c.getDeclaredMethod("getITelephony"); 
     m.setAccessible(true); 
     ITelephony telephonyService = (ITelephony) m.invoke(tm); 

     telephonyService.silenceRinger(); 
     telephonyService.endCall(); 
     Toast.makeText(context, "Call Ended !", Toast.LENGTH_SHORT).show(); 
} 
+0

J'ai une question similaire et il semble que vous connaissiez la réponse. Pourriez-vous s'il vous plaît regarder ma question de téléphonie/réflexion http://stackoverflow.com/questions/43859456/how-to-use-reflection-to-get-accurate-lte-pci-physical-cell-id-in-android- application – JParks