【问题标题】: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.javaPhoneFactory.javaCommandInterface.java 中作为私有 API 存在,有哪些替代方案?

具体来说,我的问题是:

  1. PhoneFactory.getDefaultPhone() 的“替换”是什么?
  2. 访问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();
}

【讨论】:

猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
相关资源
最近更新 更多