Android中电话监听并删除来电记录

需要加 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});
      }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值