参考http://gqdy365.iteye.com/blog/2173057
要把文件放到合适的位置:
ITelephony.aidl 文件时在包
com.android.internal.telephony.ITelephony;
android.telephony.NeighboringCellInfo;
在Receiver里面,ITelephony 会是红色的,这个时候需要倒入包:
import com.android.internal.telephony.ITelephony;
然后直接执行就好了。。。。。。
aidl下载地址:http://www.netmite.com/android/mydroid/1.5/frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl
下面我们就讲一个挂断电话的例子,我们知道,Android的api里面是
没有挂断电话的操作的
那如果我们的应用就有这样一个需求呢,那怎么办
其实也很容易,就是通过aidl来挂断电话,那么我们现在来写一下
首先,我们先把两个aidl文件复制到src目录下面
你肯定会问,这些aidl文件是在那里找到的,那么我可以告诉你,这些是Android的源码里面找到的,就是在base这个下面的
大家可以下载下来看看,如果有不会的,请看点击这里
既然把aidl文件拷贝过去之后,我们就可以写代码啦
com.xiaobin.endcall.MainActivity
- package com.xiaobin.endcall;
- import java.lang.reflect.Method;
- import com.android.internal.telephony.ITelephony;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.view.View;
- public class MainActivity extends Activity
- {
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- }
- public void click(View v)
- {
- endCall();
- }
- //挂断电话
- private void endCall()
- {
- try
- {
- //通过反射拿到android.os.ServiceManager里面的getService这个方法的对象
- Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
- //通过反射调用这个getService方法,然后拿到IBinder对象,然后就可以进行aidl啦
- IBinder iBinder = (IBinder) method.invoke(null, new Object[] {TELEPHONY_SERVICE});
- ITelephony telephony = ITelephony.Stub.asInterface(iBinder);
- telephony.endCall();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
因为那个服务没有公开的,所以我们就要用到反射来调用这个服务,来拿到Binder对象
还有重要的一点喔,要加上相应的权限,不然挂不断的喔
- <uses-permission android:name="android.permission.CALL_PHONE"/>
好啦,到这里,挂断电话的操作就完成的啦,可以测试一下啦,然后我们手机卫士的这个项目的黑名单那里也有挂断电话的操作的喔