1、创建android.telephony包,把NeighboringCellInfo.aidl复制进去。
2、创建com.android.internal.telephony包,把ITelephony.aidl复制进去。
位置如图:
3、挂断电话核心方法(利用反射)
/**
* 挂断电话
*/
protected void endCall() {
//tm.endCall(); 1.5版本后,把该方法阉割掉了
//想用该功能,实现方法
//ServiceManager.getService();
//反射调用
//1.class
try {
Class clazz = Class.forName("android.os.ServiceManager");
//2. method
Method method = clazz.getDeclaredMethod("getService", String.class);
//3.obj 不需要 静态方法(静态方法用类名调用,不需要实例化对象)
//4. 调用
IBinder binder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);
//5.aidl
ITelephony iTelephony = ITelephony.Stub.asInterface(binder);
iTelephony.endCall();//挂断电话
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4、清除通讯录中被endCall()方法挂断的电话号码(因为记录未接电话的时间不确定,所以利用内容观察者)
//挂断电话之前先注册内容观察者
getContentResolver().registerContentObserver(Uri.parse("content://call_log/calls"), true,
new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
//电话日志变化 触发此方法调用
deleteCalllog(incomingNumber);//删除电话日志
//取消内容观察者注册
getContentResolver().unregisterContentObserver(this);
super.onChange(selfChange);
}
});
endCall();