为了账号安全,请及时绑定邮箱和手机立即绑定

android开发中的反射方法的使用案列

标签:
Android

我做的是电话黑名单的拦截,但是在调用endcall方法的时候是不行的,servicemanager对android开发者隐藏,所以不能直接调方法,要用反射的机制。


 // ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));

我要做的就是得到上述代码的返回方法,然后才能调用隐藏在aidl中的endcall()方法。



1:将有关的aidl文件拷贝到自己的项目工程中去。NeighboringCellInfo.aidl和NeighboringCellInfo.aidl,这两个是我所需要的。


2.      // 1.获取ServiceManager的字节码文件
    Class<?> clazz = Class.forName("android.os.ServiceManager");

android.os.ServiceManager对应的是ServiceManager,因为不能引入包,所以只能用反射的方式导包。


import android.app.Service;  -----------这个是要导入的包,对应下面的包的话

//import android.os.ServiceManager;


什么是字节码文件:字节码文件是经过编译器预处理过的一种文件,是JAVA的执行文件存在形式,它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比系统直接执行的慢。


3. // 获取方法,参数1是方法的名称,参数2是方法里面的参数的类型,可以返回源码去看。

  method = clazz.getMethod("getService", String.class);



4.//反射调用此方法  看源码返回的是什么类型 
    IBinder ibinder=(IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);
    //调用aidl的文件方法
    ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);
    //调用aidl中隐藏的endcall方法
    iTelephony.endCall();

以上会有异常,统一抓就行拉。

原文链接:http://www.apkbus.com/blog-846519-61638.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消