通过AIDL实现挂断电话功能

1.通过查看TelephonyManager可以看到很多隐藏的方法,这些隐藏的方法大部分都是通过调用getITelephony得到一个ITelephony对象来实现这些功能的,可以看出TelephonyManager相当于一个包装类,主要功能都是在ITelephony对象中,想要实现挂断电话功能可以通过得到Itelephony实现,分析如下代码:
ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
可以看出Itelephony是通过aidl文件得到的,所以从安卓源码中找到
E:\2.3 source\JB\frameworks\base\telephony\java\com\android\internal\telephony\ITelephony.aidl
文件,并且查看它所在的包,在自己工程的src下创建同样的包,拷入ITelephony.aidl
2.拷入后通过查看ITelephony.aidl 文件源码,发现缺少一个aidl文件,查找NeighboringCellInfo.aidl 以同样方式复制进工程下.
3.调用 ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));发现ServiceManager是一个隐藏类,无法直接使用.那么只能通过反射得到类的getService方法.如:
//通过反射得到隐藏类
Class

    //通过AIDL得到的对象,调用挂断电话的方法
    asInterface.endCall();

实现代码:

    //通过反射得到隐藏类
    Class<?> serviceManager = MyTelephonyListener.class.getClassLoader().loadClass("android.os.ServiceManager");
    Method method = serviceManager.getMethod("getService", String.class);
    Object invoke = method.invoke(null,Context.TELEPHONY_SERVICE);
    //使用AIDL得到接口对象
    ITelephony asInterface = ITelephony.Stub.asInterface((IBinder) invoke);
    //通过AIDL得到的对象,调用挂断电话的方法
    asInterface.endCall();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值