Android 电话呼入流程

首先,呼叫通知由phoneApp来实现。

PhoneApp.java->onCreate()->CallNotifier.java->handleMessage()->onNewRingingConnection()接受来自ril层的电话响应,并发出电话铃音或者震动。

注:其实这里的PhoneApp.java->onCreate()是在开机时就被执行过了。它调用了CallNotifier.init。

当电话发出铃音或震动的同时,继续执行PhoneUtils.java->showIncomingCallUi()->PhoneApp.java->voiddisplayCallScreen()中的startActivity()跳转到InCallScreen.java中执行初始化呼入界面。

继续执行internalResolveIntent(intent)->internalAnswerCall()->PhoneUtils.answerCall()->Phone.accept()为电话开始接听

***************************CallNotifier***************************
本类extends Handler并且implements CallerInfoAsyncQuery.OnQueryCompleteListener   

电话状态改变之后本类会接到Message,然后本Handler通过Message的不同,进入不同的case:

   然后调用不同的方法处理各种状态改变。

   同时实现了OnQueryCompleteListener接口,当来电的时候会帮助执行查询操作,比如查询并调用

   Ringer设置响铃方式。

当来电时,本类会接受到一个PHONE_NEW_RINGING_CONNECTION(Message.what),然后调用对应的方法

   onNewRingingConnection(),该方法又会调用startIncomingCallQuery()方法,该方法就查询用户

  设置的铃声(可能是系统的,也可能是用户自定义的),如果查询完成则直接调用onQueryComplete().

   假如执行超时的话,将会发送一个延时Message,延时后将默认调用系统的铃声。

   假如在延时发送Message过程中Query已经完成,由于CallNotifier实现了OnQueryCopleteListener,

   就会自动调用onQueryComplete()方法,该方法将会首先把可能存在的延时Message给Remove,以防止

   再次设置铃声。接着调用onCustomRingQueryComplete()方法。然后该方法里面会调用Ringer的ring()

   方法启动响铃。

参考:

http://blog.csdn.net/liujianminghero/article/details/6743049

http://www.cnblogs.com/chenxian/archive/2010/09/28/1837489.html

android 呼入电话的监听(来电监听)

Android phone app 默认启动理解以及对Java端入口的分析

android persistent属性研究

http://www.doc88.com/p-191102683582.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值