Android Tel 拨打电话及来电流程分析
打电话流程
接下来分析一下打电话的流程。输入电话号码的流程这里忽略。输入电话号码之后会点击拨打图标。之后就会走拨打电话的流程了。这部分是在packages/apps/Dialer/src/com/android/dialer/DialtactsActivity.java中实现的。
下面分析源码分析
public void onClick(View view) {switch (view.getId()) {case R.id.floating_action_button:if (mListsFragment.getCurrentTabIndex()== ListsFragment.TAB_INDEX_ALL_CONTACTS && !mInRegularSearch) {DialerUtils.startActivityWithErrorToast(this,IntentUtil.getNewContactIntent(),R.string.add_contact_not_available);} else if (!mIsDialpadShown) {mInCallDialpadUp = false;showDialpadFragment(true);mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);mFloatingActionButton.setVisibility(view.VISIBLE);setConferenceDialButtonImage(false);setConferenceDialButtonVisibility(true);} else {//用户点击拨打键mDialpadFragment.dialButtonPressed();}break;}}
上面就是click之后将会调用packages/apps/Dialer/src/com/android/dialer/dialpad/DialpadFragment.java
public void dialButtonPressed() {getView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);//按键反馈
handleDialButtonPressed();
}private void handleDialButtonPressed() {final Intent intent = CallUtil.getCallIntent(number);
if (!isDigitsShown && !PhoneNumberUtils.isEmergencyNumber(number)) {// must be dial conference add extraintent.putExtra(EXTRA_DIAL_CONFERENCE_URI, true);
}intent.putExtra(ADD_PARTICIPANT_KEY, mAddParticipant && isPhoneInUse());DialerUtils.startActivityWithErrorToast(getActivity(), intent);hideAndClearDialpad(false);}
之后就开始启动拨号的Activity
启动Activity代码如下:
packages/apps/Dialer/src/com/android/dialer/util/DialerUtils.javapublic static void startActivityWithErrorToast(Context context, Intent intent, int msgId) {try {if ((IntentUtil.CALL_ACTION.equals(intent.getAction())&& context instanceof Activity)) {final TelecomManager tm =(TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);tm.placeCall(intent.getData(), intent.getExtras());} else {context.startActivity(intent);}} catch (ActivityNotFoundException e) {Toast.makeText(context, msgId, Toast.LENGTH_SHORT).show();}}
这里面有两种拨号的方式:1.直接调用TelecomManager进行呼叫;2,启动一个Activity显示拨号界面。
这里面有一个转换过程:public static final String CALL_ACTION = Intent.ACTION_CALL;
之后拨打电话的流程如下图:
接收来电的处理过程
SubscriptionManager本身就是一个service
registerService(Context.TELEPHONY_SUBSCRIPTION_SERVICE, SubscriptionManager.class,)
之后就开始监听消息。
当有新的call之后处理
这里面需要注意,bind的Service为:TelephonyConnectionService
之后就是调用UI注册进来的listener用来更新UI了。
Android Tel 拨打电话及来电流程分析相关推荐
- Android 10 拨打电话流程
接续上一章节,理解Android 10 拨打电话流程 packages/apps/Dialer/java/com/android/dialer/dialpadview/DialpadFragment. ...
- Java模拟拨打电话程序_java_编写android拨打电话apk应用实例代码,android 实现拨打电话的app,代 - phpStudy...
编写android拨打电话apk应用实例代码 android 实现拨打电话的app,代码非常简单,功能也很实用,分享给大家. MainActivity.java package com.bblei.c ...
- Android 源码 Camera2 预览流程分析四
<Android 源码 Camera2 预览流程分析二>中进行了流启动,这是调用 QCamera3Channel start() 方法实现的,对应于 HAL_PIXEL_FORMAT_YC ...
- android N 拨打电话流程(MO)
本流程图基于MTK平台 Android 7.0,拨打的普通电话,本流程只作为沟通学习使用 整体流程图 流程中部分重点知识 packages-apps目录 dialer应用的DialpadFragmen ...
- Android N拨打电话的流程
1. 从Dialer工程开始,DialtactsActivity中打开DialpadFragment界面,在DialpadFragment中实现OnClickListener的onClick()方法, ...
- android -- phone (三)来电流程
上一篇是去电流程,接下来自然是来电流程,按消息的接收顺序,我们关心来电消息最开始是从哪来的,所以先RIL层开始,这里如果有涉及AT命令,均以android源码所使用的AT命令为准(即 3gpp 27. ...
- android调用拨号界面拨打电话功能,Android实现拨打电话功能
添加权限: 实现: package com.example.call_person; import android.annotation.SuppressLint; import android.co ...
- Android实现拨打电话
一.添加拨打电话的权限 <uses-permission android:name="android.permission.CALL_PHONE"/> 二.两种方法 1 ...
- android如何拨打电话
方法一:直接拨打电话,需要添加权限 <uses-permission android:name="android.permission.CALL_PHONE" /> / ...
最新文章
- oracle惯用缩写的含义
- Cisco IOS版本命名规范
- Spring boot 各种入门及问题
- ntu 课程笔记 :MAS714(7) 最短路径和优先队列
- MySQL非空约束(NOT NULL)
- zookeeper结构和命令详解
- Word2Vec教程-Skip-Gram模型
- MapReduce:详解Shuffle过程
- RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-
- html css 博客园,分享几个博客园代码样式的CSS配置(复制黏贴即可)
- 计算机实验报告protel,Protel 99 SE使用基础 实验报告.doc
- 阿里AndFix与sophix热修复原理解析
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩 纹理映射技术 一
- 产品驱动程序一览表(ThinkPad X61)
- C语言入门实战(11):输入一组正整数,求逆序数的和
- 除了性以外,有没有快速、高效的释放压力、清空大脑的方式?
- 移动100m宽带慢的要死_移动宽带不稳定怎么办,移动100m宽带慢解决方法
- 既想吸猫又不想当猫奴?这款治愈系的机器人或许会适合你
- 2010考研数学二第(15)题——导数应用:单调区间与极值
- 小米4电信4G_2014716_官方线刷包_救砖包_解账户锁
热门文章
- (个人记录)安装pycocotools库出现Could not build wheels for pycocotools which use PEP 517 and cannot be install
- 将工业ISM和消费者ISM频段设备迁移到LoRaWAN,LoRa设备开发参考指南(二十)
- 联接(CROSS JOIN、JOIN、OUTER JOIN)
- 广播电视相关信息系统安全 等级保护测评要求
- mybatis-generator同名表的处理
- 078 周期函数定积分性质及定积分三大性质总结
- 计算机格式怎么调,怎么改电脑硬盘格式?
- cad画直角命令_在cad中怎么画角度?cad画角度三种方法介绍
- 云服务器与物理服务器有什么区别?
- pgsql 日期转换