Java 反射以访问高级电话功能

Java 反射以访问高级电话功能,java,android,Java,Android,我试图使用反射来访问电话API的一些未发布的特性。目前,我在实例化一个serviceManager对象时遇到了问题,该对象是作为绑定器获取“电话”服务所需的,然后我可以使用它来实例化一个电话对象,该对象是拨打电话、结束通话等所需的 现在我打电话的时候 serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { new Binder() }); 它返回一个nullPointerException。我认为这与创建新的

我试图使用反射来访问电话API的一些未发布的特性。目前,我在实例化一个
serviceManager
对象时遇到了问题,该对象是作为绑定器获取“电话”服务所需的,然后我可以使用它来实例化一个电话对象,该对象是拨打电话、结束通话等所需的

现在我打电话的时候

serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { new Binder() });
它返回一个nullPointerException。我认为这与创建新的活页夹有关,而不是发送适当的活页夹(我不确定哪一个合适)

通过执行以下操作

Binder tmpBinder = new Binder();
tmpBinder.attachInterface(null, "fake");
serviceManagerObject = tempInterfaceMethod.invoke(null,  new Object[] { tmpBinder });
您将获得一个ServiceManagerProxy实例,然后下一个问题发生在该行上

telephonyCall.invoke(telephonyObject, number);

是的,有可能!我花了24小时的调查和发现,我找到了“新鲜”的解决方案

// "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);
任何想要开发呼叫控制软件的人都可以访问此起点:

有一个项目。还有重要的评论(和信用)

简而言之:复制aidl文件,将权限添加到清单,复制粘贴源以进行电话管理

更多信息:如果你是根用户,你只能发送AT命令。然后,您可以关闭系统进程并发送命令,但需要重新启动才能让手机接收和发送电话


我很高兴!现在我的Shake2MuteCall将获得更新

我有一个解决办法。更改:

String serviceManagerName = "android.os.IServiceManager"; 
致:


“当前我无法实例化serviceManager对象”是您提供的有关错误或问题的唯一信息。你给了我们密码。现在告诉我们它正在做什么或没有做什么是出乎意料的,以及您如何知道它工作不正常。嗨。我是mylock的开发者。我只是想告诉你,这在2.3上不再有效,我们正在研究如何在超级用户root权限的情况下实现相同的结果。我没有想到这个方法,我的一个朋友Tedd发现了这个方法,并找到了将反射应用到itelephony的方法。嘿@Albebe上面的链接现在不起作用,你能分享aidl文件和电话管理源吗?这对我有很大帮助。
String serviceManagerName = "android.os.IServiceManager"; 
String serviceManagerName = "android.os.ServiceManager";