2010-05-06 58 views
4

我打算编写与手机和直接SIM写入相关的测试。如何访问未在TelephonyManager中公开的Android私有API?

如果所需的API没有在TelephonyManager中公开,但在PhoneBase.javaPhoneFactory.javaCommandInterface.java中存在私有API,那么有什么替代方法?

具体来说,我的问题是:

  1. 什么是 “置换” 为:PhoneFactory.getDefaultPhone()
  2. 访问CommandsInterface(例如:CommandsInterface mCmdIf = ((PhoneBase)mPhone).mCM)的替代方法是什么?

由于提前,
米莎

+0

在PhoneFactory内部API调用,米莎指的是[在这里可以查看(HTTP://喜-android.info/src/com/android/internal/telephony/PhoneFactory.java.html)。 – 2011-01-26 12:29:40

回答

6

您可以使用java reflection

这里是我访问com.android.internal.telephony.ITelephony类的方法来阻止来电...

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

我有一个类似的问题,似乎你知道答案。你可以看看我的电话/反射问题http://stackoverflow.com/questions/43859456/how-to-use-reflection-to-get-accurate-lte-pci-physical-cell-id-in-android-应用 – JParks 2017-05-11 17:45:31