android 拨号盘屏蔽号码功能流程

通过拨号盘设置-》blocked number-》add a number

Blocked calls and text from:找到在Add_blocked_number_dialog.xml中,add_blocked_number.根据此资源找到BlockedNumbersActivity中的showAddBlockNumberDialog,的addBlockedNumber函数,进入BlocekNumberTaskFragment.blockIfNotAlreadyBlocked(),进入BlockNumberTask。

    BlockNumberTask.doInbackgroung()函数,会通过contendResolver.Insert将block的号码加入BlockedNumberContract.BlockedNumbers.Content_URI (字段值为com.android.blockednumber)的provider提供者中。

  在pakages/providers/blockedNumberProvider/下的AndroidManifest.xml中,节点Provider 的authorities属性为ccom.android.blockednumber。则此模块为对应的provider。其BlokedNmuberProvider.java文件中insert函数。这里向真正的数据库写入。


在短信模块,和通话模块中都对应的通过BlockChecker.java的isBlocked函数,通过contentReslover访问provider实现对短信和电话的屏蔽。

一个是INboundSmsHandler.java的processMessagePart()。

经过分析通话log,屏蔽的电话号码的log如下:

04-02 13:40:35.082  1497  2384 I Telecom : Event: RecordEntry TC@2: BLOCK_CHECK_INITIATED, null: (...->CS.crCo->H.CS.crCo->H.CS.crCo.pICR)->CSW.hCCC->ABCF.dIB@E-E-CJY
04-02 13:40:35.096  1497  1497 I Telecom : Event: RecordEntry TC@2: BLOCK_CHECK_FINISHED, [Reject]: (...->CS.crCo->H.CS.crCo->H.CS.crCo.pICR)->CSW.hCCC->ABCF.oPE@E-E-CJY
04-02 13:40:35.099  1497  1497 I Telecom : Event: RecordEntry TC@2: SET_RINGING, blocking call: (...->CS.crCo->H.CS.crCo->H.CS.crCo.pICR)->CSW.hCCC->CILH.sL->CILH.oQC->ICF.oCFC@E-E-CJY

04-02 13:40:35.100  1497  1497 I Telecom : CallsManager: onCallFilteringCompleted: blocked call, rejecting.: (...->CS.crCo->H.CS.crCo->H.CS.crCo.pICR)->CSW.hCCC->CILH.sL->CILH.oQC->ICF.oCFC@E-E-CJY


在callsManager.java的onSuccessfulIncomingCall()函数中,通过AsyncBlockerFilter加入Filters,INcomingCallFilter.performFiltering()触发AsyncBlockerFilter.startFilterLokkup.

触发AsyncBlockCheckFilter.doInBackground()此函数在通过Log.addEvent添加BLOCK_CHECK_INITIATED打印。具体的操作就是通过BlockCheckAdapter.isBlocked->BlockerChecker.isBlocked()->BlockedNumberContract.SystemContract.shouldSystemBlockedNumber()->BlockNumberContract.shouldSystemBlockedNumber->ContentReslover.Call(content://com.android.blockednumber,METHOD_SHOULD_SYSTEM_BLOCK_NUMBER)

对应的走到BlockedNumberProvider.call()->BlockedNumberProvider.shouldSystemBlockedNumber->BlockedNumberProvider.isBlocked()到这里就进入真正的数据库查询了。

AsyncBlockCheckFilter执行完doInBackground()调用onPostExecute().

INcomingCallFilter的第二个入参CallFilterResultCallBack为listenner,传入的就是callManager本身,callManager确实也实现了onCallFilterComplete函数。

AsyncBlockCheckFilter.onPostExecute调用了其onCallFilterComplete().此函数判断reslut.rejecting为true,则调用incomingcall.reject,拒绝通话。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值