需要加 import com.android.internal.telephony.ITelephony;
import android.telephony.NeighboringCellInfo;
两个aidl文件
//电话监听
private void registerPhoneListener() {
mManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mListener = new PhoneListener();
//长久监听
mManager.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
}
class PhoneListener extends PhoneStateListener {
/**
* 来电状态改变监听
* @param state
* @param incomingNumber 来电的号码
*/
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
mCommingNumber = incomingNumber;
switch (state){
case TelephonyManager.CALL_STATE_IDLE: //电话处于空置状态
break;
case TelephonyManager.CALL_STATE_RINGING: //电话处于响铃状态
BlackListCRDU crdu = new BlackListCRDU(HarassInterceptService.this);
String type = crdu.queryByNumber(incomingNumber);
if (type.equals("电话") || type.equals("电话+短信")){
//结束通话
try {
Class clazz = Class.forName("android.os.ServiceManager");
Method method = clazz.getMethod("getService", String.class);
IBinder iBinder = (IBinder) method.invoke(clazz.newInstance(), Context.TELEPHONY_SERVICE);
ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
iTelephony.encall();
//结束通话后,不要忘了清除通话记录,清除记录有可能发生在添加记录之前,所以总会有一条最新的通话记录删除不掉。
//如果想全部都删除,那么可以让后面的动作稍稍延迟一会在执行。
// 但是这里不建议这么使用,因为这个休眠时间不确定。
//所以这里选择使用内容观察者,
//注册观察
Uri uri = Uri.parse("content://call_log/calls");
/*
* content://call_log/calls/8
*
* 参数一: 观察什么路径的数据
*
* 参数二: true : 只要前半段uri匹配也能收到通知 , false , 所有都必须匹配。
*
* 参数三: 内容观察者对象
*
*/ getContentResolver().registerContentObserver(uri, true, new CallLogObserver(new Handler()));
} catch (Exception e) {
e.printStackTrace();
}
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //电话处于挂断状态
break;
}
}
}
//内容观察者
private class CallLogObserver extends ContentObserver {
public CallLogObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://call_log/calls");
resolver.delete(uri, "number=?", new String[]{mCommingNumber});
}
}