没有合适的资源?快使用搜索试试~ 我知道了~
美国时间2013年10月31日,Google正式发布了全新版本的移动操作系统Android4.4KitKat。据google官方介绍,Android4.4降低了硬件的需求,提高了程序运行效率。距离4.4发布已经过去3个月了,不少朋友也已经体验到了4.4所带来的快感,大家可以用过刷入三方ROM(比如知名的CMROM等)体验Android4.4。但从目前来看,基于MTK平台的设备,几乎还没有运行Android4.4的设备,OEM厂商拿到系统之后会做许多定制,比如MTK就比高通的定制更多,这也就是为什么国内许多厂商直接拿到MTK的方案就可以出货的原因,当然这也造成了铺货时间更慢。因工作原因,这里就以
资源推荐
资源详情
资源评论
Android4.4KitkatPhone工作流程浅析工作流程浅析
(一)__概要和学习计划
美国时间 2013 年 10 月 31 日, Google 正式发布了全新版本的移动操作系统 Android 4.4 KitKat 。据 google官方介
绍,Android 4.4 降低了硬件的需求,提高了程序运行效率。距离 4.4 发布已经过去3个月了,不少朋友也已经体验到了 4.4
所带来的快感,大家可以用过刷入三方ROM(比如知名的CM ROM等)体验Android 4.4。但从目前来看,基于MTK平台的设
备,几乎还没有运行Android 4.4 的设备,OEM厂商拿到系统之后会做许多定制,比如MTK就比高通的定制更多,这也就是
为什么国内许多厂商直接拿到MTK的方案就可以出货的原因,当然这也造成了铺货时间更慢。
因工作原因,这里就以MTK平台Android 4.4为例(后文例子代码使用MTK平台 Android 4.4 代码,但基于各方面原因只标注关
键代码,以调用时序图为主),整理并记录 Android 4.4 Phone 的工作流程。虽然MTK对于Android的源码定制修改较多,但
整体结构还是可以与原生进行对比的。
我们知道通话功能(Telephony)是手机最基本,也是最终要的功能,因此 Google对于这块的改动历来是最少的。在经过了数
次迭代之后,我们在 4.4 上发现 Google 对 Phone 模块进行了较大的改动。从图1可以大致看到相关的改动:
原来的Phone应用不见了,取而代之的是Dialer和TeleService,为什么这里把InCallUI单独列出来呢?实际上我们单独去编译
InCallUI也是可以生成对应的APK的,但实际上push到手机中却没有效果,因为Dialer的Android.mk中已经将InCallUI的代码
包含,也就是已经将InCallUI的代码打包到了Dialer.apk中。如下:
src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src
res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common \
--extra-packages com.android.incallui
从整体上来讲,也就是说把原来的Phone分成了几块,Dialer现在是拨号应用,TeleService是Server端,InCallUI负责显示。
相对于 4.4 之前的Phone应用来说,这样更改后结构更加清晰明了。
(二)__UI结构分析
概述
之前有分析过Android 4.2的InCallScreen结构(传送门),但后面Google发布了Android 4.4即Kitkat,遂决定以之前的文章为模
板,重新整理并记录。在4.4中当有来电或去电时,显示给用户的界面如图1,在4.4之前称之为InCallScreen,但在4.4之后叫
做InCallActivity。在4.4中我们调出的拨号盘界面,实际为DialtactsActivity并隶属于Dialer应用。4.4 中界面分为3
块,CallCardFragment、CallButtonFragment、AnswerFragment,如下所示:
图 1 InCallActivity界面(左:接通 右:来电)
InCallActivity布局分析
在InCallActivity.java中,实现了对界面的初始化,在4.4中界面的布局是通过fragment来完成的,即incall_screen.xml,代码
如下:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main">
<!-- MTK VideoCall fragment -->
<FrameLayout
android:id="@+id/vtCallFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/in_call_and_button_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/in_call_card_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<!-- CallCard fragment 用于显示联系人信息 -->
<fragment
android:name="com.android.incallui.CallCardFragment"
android:id="@+id/callCardFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<!-- 拨号盘 独立出来易于复用 -->
<fragment
android:name="com.android.incallui.DialpadFragment"
android:id="@+id/dialpadFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
<!-- 控制按钮 也就是原来的InCallTouchUi -->
<fragment android:name="com.android.incallui.CallButtonFragment"
android:id="@+id/callButtonFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<!-- 来电接听/挂断控件 原始使用的系统的GlowpadView -->
<fragment android:name="com.android.incallui.AnswerFragment"
android:id="@+id/answerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:gravity="top"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
android:visibility="gone" />
<!-- 会议电话管理界面 -->
<fragment android:name="com.android.incallui.ConferenceManagerFragment"
android:id="@+id/conferenceManagerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true" />
</FrameLayout>
从整个布局来看,4.4使用fragment代替了原来写死的布局。一方面更能体现出模块化设计,另一方面对于不同屏幕尺寸的适
配也更为容易。根据布局文件,InCallActivity主要包括以下几个部分:
1.callCardFragment:用于显示联系人信息及通话时间等;
2.callButtonFragment:通话界面下方的控制按钮,之前叫做InCallTouchUi;
3.conferenceManagerFragment:会议电话的界面;
4.vtCallFragment:视屏通话控件;
5.dialpadFragment:拨号盘显示控件。
剩余18页未读,继续阅读
资源评论
weixin_38535812
- 粉丝: 5
- 资源: 986
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python使用Drl来解决多智能体卸载问题+源码(期末作业&课程设计&项目开发)
- 科学计算领域中的Fortran语言基础知识与应用
- 4.健身房预约课程-微信小程序.zip
- 小乌龟键盘控制源码111111
- 电赛2023年本科组电子电路设计比赛指南与任务解析
- Delphi 12 控件之dspack For Delphi 10.2 - 视频播放组件包e963a-main.zip
- delphi 12 控件之FB4D – The OpenSource Cross-Platform Library for FirebaseFB4D-master.zip
- Rust语言入门与进阶教程
- delphi 12 控件之Delphi开发的微信电脑版登录工具ec617-main.zip
- Delphi 12 控件之DELPHI微信、支付宝支付(DLL源码)92c16-main.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功