android电话接听过程简单解析

一个新来电是由CallNotifier监听到的,CallNotifier类继承与Handler,在CallNotifier.java里面,代表新来点的Message是PHONE_NEW_RINGING_CONNECTION。

mPhone.registerForNewRingingConnection(this, PHONE_NEW_RINGING_CONNECTION, null);

当然,得注册这个信号。有新来电时,CallNotifier收到这个新号,交由onNewRingingConnection((AsyncResult) msg.obj)来处理

在onNewRingingConnection()内,

boolean provisioned = Settings.Secure.getInt(mPhone.getContext().getContentResolver(),
            Settings.Secure.DEVICE_PROVISIONED, 0) != 0;
查询是否设置了拒接电话,如果是,则直接挂断电话。然后,设置音频为响铃状态,通过startIncomingCallQuery(Connection c)开始查询来电信息。

在startincomingCallQuery()里面,先判定是否能查询,如果不是,直接启动来电界面,否则,继续查询来电人的信息,比如对应铃声等,查询完以后,启动来电界面,即调用displayCallScreen();

 

启动来电界面以后,电话控制权就完全交由InCallScreen.java, 但是到现在为止,电话还是没有接通,只是通知了有来电,这就是,CallNotifier.java完成的任务,跟他的名字一样,只是起到Notify的作用。在来电界面,InCallScreen.java监听用户的Key Event, 如果按下的是接听键,则接听电话,如果是挂机键,就挂断电话。

 

按下接听键, CallNotifier会收到一个PHONE_STATE_CHANGED的信号,如果按下,挂机键,会收到一个PHONE_STATE_DICONNECT,如果接听,则设置音频状态为接听电话状态,停止响铃,放置一个接电话的图标在屏幕上,与此同时,InCallScreen也会收到这样一个新号,它做的事情就是更新通话界面,比如点亮屏幕,使菜单消失等等。 但是如果挂断电话,那做的是就是更新通话记录,停止响铃等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值