一个新来电是由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也会收到这样一个新号,它做的事情就是更新通话界面,比如点亮屏幕,使菜单消失等等。 但是如果挂断电话,那做的是就是更新通话记录,停止响铃等。

更多相关文章

  1. Android模块开发框架 LiveData+ViewModel
  2. android 简单实现,微信第三方登录
  3. android resoult A>B 结束B A显示B中的内容
  4. 安卓应用的界面编程(2)
  5. Android无需申请权限拨打电话的两种方式
  6. Android完全退出App,关闭所有的Activity
  7. android intent action 介绍大全
  8. Android(安卓)Studio SDK Manager无法正常下载如何设置
  9. android tab之间滑动切换界面功能

随机推荐

  1. Android面试题目之三: 字符串转整形
  2. Android 浅析 Volley
  3. 自定义的Spinner文字居中
  4. Android(安卓)Material Design:Coordinato
  5. Android Studio 1.0正式稳定版下载地址
  6. Android(安卓)Monkey测试
  7. Android的一些开源库
  8. [android]-记录日志到sd卡
  9. Android反射机制详解
  10. android代码实现ScaleAnimation动画(附原