【问题标题】:How can I access Android private API's which doesn't exposed in TelephonyManager?如何访问未在 TelephonyManager 中公开的 Android 私有 API?
【发布时间】:2010-05-06 05:50:31
【问题描述】:
我打算编写与 Phone 和 Direct SIM 写入相关的测试。
如果所需的 API 没有在 TelephonyManager 中公开,而是在 PhoneBase.java、PhoneFactory.java 或 CommandInterface.java 中作为私有 API 存在,有哪些替代方案?
具体来说,我的问题是:
-
PhoneFactory.getDefaultPhone() 的“替换”是什么?
- 访问
CommandsInterface 的替代方法是什么(例如:CommandsInterface mCmdIf = ((PhoneBase)mPhone).mCM)?
提前致谢,
米夏
【问题讨论】:
标签:
android
telephony
telephonymanager
【解决方案1】:
您可以使用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();
}