Android学习之TextView属性总结

时间:2019-05-13 19:14:25下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Android学习之TextView属性总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Android学习之TextView属性总结》。

第一篇:Android学习之TextView属性总结

IT在线教育平台———麦子学院:http://www.xiexiebang.com

TextView作为android开发中最简单也最常用的控件,作为初学者,需要熟知其属性并熟练掌握。如下例:

android:autoLink:设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web /email/phone/map/all)android:autoText:如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

android:bufferType:指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里

1、这里2。

android:capitalize:设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。

android:cursorVisible:设定光标为显示/隐藏,默认显示。

android:digits:设置允许输入哪些字符。如“1234567890.+-*/%()”

android:drawableBottom:在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。android:drawableLeft:在text的左边输出一个drawable,如图片。

android:drawablePadding:设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。

android:drawableRight:在text的右边输出一个drawable。android:drawableTop:在text的正上方输出一个drawable。android:editable:设置是否可编辑。

android:editorExtras:设置文本的额外的输入数据。

android:ellipsize:设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end” ——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)android:freezesText:设置保存文本的内容以及光标的位置。

android:gravity:设置文本位置,如设置成“center”,文本将居中显示。

android:hintText:为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在 EditView中使用,但是这里也可以用。

android:imeOptions:附加功能,设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。

android:imeActionId:设置IME动作ID。android:imeActionLabel:设置IME动作标签。

android:includeFontPadding:设置文本是否包含顶部和底部额外空白,默认为true。android:inputMethod:为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。IT在线教育平台———麦子学院:http://www.xiexiebang.com

android:inputType:设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。

android:linksClickable:设置链接是否点击连接,即使设置了autoLink。

android:marqueeRepeatLimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。

android:ems设:置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度 android:maxEms:设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:minEms:设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:maxLength:限制显示的文本长度,超出部分不显示。

android:lines:设置文本的行数,设置两行就显示两行,即使第二行没有数据。android:maxLines:设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。

android:minLines:设置文本的最小行数,与lines类似。android:lineSpacingExtra:设置行间距。

android:lineSpacingMultiplier:设置行间距的倍数。如”1.2”

android:numeric:如果被设置,该TextView有一个数字输入法。此处无用,设置后唯一效果是TextView有点击效果,此属性在EdtiView将详细说明。android:password:以小点”.”显示文本

android:phoneNumber设:置为电话号码的输入方式。

android:privateImeOptions:设置输入法选项,此处无用,在EditText将进一步讨论。android:scrollHorizontally:设置文本超出TextView的宽度的情况下,是否出现横拉条。android:selectAllOnFocus:如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。

android:shadowColor:指定文本阴影的颜色,需要与shadowRadius一起使用。android:shadowDx:设置阴影横向坐标开始位置。android:shadowDy:设置阴影纵向坐标开始位置。

android:shadowRadius:设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。

android:singleLine:设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text=“test_ singleLine ” android:singleLine=“true” android:layout_width=“20dp”将只显示“t…”。如果不设置singleLine或者设置为false,文本将自动换行 android:text设置显示文本.android:textAppearance:设置文字外观。如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargIT在线教育平台———麦子学院:http://www.xiexiebang.com

eInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse android:textColor:设置文本颜色

android:textColorHighlight:被选中文字的底色,默认为蓝色

android:textColorHint:设置提示信息文字的颜色,默认为灰色。与hint一起使用。android:textColorLink:文字链接的颜色.android:textScaleX:设置文字之间间隔,默认为1.0f。android:textSize:设置文字大小,推荐度量单位”sp”,如”15sp”

android:textStyle:设置字形[bold(粗体)0, italic(斜体)1, bolditalic(又粗又斜)2] 可以设置一个或多个,用“|”隔开

android:typeface:设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体)3] android:height:设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)android:maxHeight:设置文本区域的最大高度 android:minHeight:设置文本区域的最小高度

android:width:设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。

android:maxWidth:设置文本区域的最大宽度 android:minWidth:设置文本区域的最小宽度

如需了解更多android开发知识,请至麦子学院官网查看。

第二篇:Android之activity总结

Android之Activity总结

一、什么是Activity

Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity 本身是没有界面的。所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道

二、Activity生命周期(生命周期方法)

由图可知,这些方法调用的顺序:

1.Activity正常启动:onCreate-> onStart-> onResume;

2.Activity被杀掉:onPause-> onStop-> onDestroy,此为一个完整的生命周期。3.中断处理:onPause-> onStop,恢复时onRestart-> onStart-> onResume;

4.如果当前Activity是半透明状态或者对话框状态:那么中断就是onPause ,恢复的时候onResume。

那么对于”Other app need memory”,就是我们手机在运行一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,至少要保证一些功能(比如电话),所以资源不足的时候也就有可能被kill掉。

方法在系统中的作用及我们应该做什么:

onCreate(创建):在这里创建界面,做一些数据的初始化工作;

onStart(可视状态): 到这一步变成“用户可见不可交互”的状态;

onResume(可交互状态):变成和用户可交互的,(在Activity栈系统通过栈的方式管理这些Activity,即当前Activity在栈的最上端,运行完弹出栈,则回到上一个Activity);

onPause(暂停状态):到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情。从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降

低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来。

OnStop(停止状态):变得不可见,被下一个activity覆盖了。

onDestroy(杀死):这是Activity被kill前最后一个被调用方法了,可能是其他类调用finish方法或者是系统为了节省空间将它暂时性的干掉。

onPause,onstop,onDestroy,三种状态下 activity都有可能被系统杀掉。

Activity栈:Activity以栈的形式进行管理,后进先出的原则

三、Activity之间的通信

在 Android 中,不同的 Activity 实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在 Activity 之间传递消息。

Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。

Intent是一种运行时绑定(runtime binding)机制

Intent负责对操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

在应用中,我们可以以两种形式来使用Intent:

直接Intent(应用程序内部):指定了component(组建)属性的Intent。通过指定具体的组件类,通知应用启动对应的组件。

间接Intent(应用程序之间):没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。

对于直接Intent,Android不需要去做解析,因为目标组件已经很明确。

Android需要解析的是那些间接Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。Intent解析机制主要是通过查找已注册在AndroidManifest.xml(清单)中的所有IntentFilter(意图过滤器)及其中定义的Intent,最终找到匹配的Intent。

横屏时:onConfigurationChanged(配置改变))

横屏以及出现键盘键盘时生命周期部重新开始的方法: KeyboardHidHidden/orientation/screenSize 横屏显示:landscape 竖屏显示:portrait

四大组建:activity:活动、service:服务、content provider:内容提供商、broadcast receiver:广播收音机

Activity的所有面试题

什么是Activity? 请描述一下Activity 生命周期?

两个Activity之间跳转时必然会执行的是哪几个方法?

你后台的Activity被系统 回收怎么办?如果后台的Activity由于某原因被系统回收可了,如何在被系统回收之前保存当前状态?

如何退出Activity?如何安全退出已调用多个Activity的Application? 两个Activity之间怎么传递数据?

第三篇:Android学习总结

Android学习总结

零零碎碎的总结:

1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该功能的运行过程写出来.3.要有自己的知识库,可以是一个工具类,把写过的,看过的好的代码放进去,也可以是一个笔记本软件.因为只有放在知识库里的东西,才是你最重要的财富.4.如果你想做自由职业者,你需要学英语,因为在国外的盈利比国内多很多.如果你想进大公司,好公司,你需要学英语.你想深入学习android,但中文的android文章太少了,你查查百度,到处都是copy来copy去的hellword,所以,你需要学英语.如果你想出国,你需要学英语.5.Http协议要研究透彻.http的信息头有什么信息,分别代表什么,信息体有什么信息,代表什么,都要搞的明明白白.scoket也是一样.6.在eclipse里的layout文件都有graphical Layout.通过这个好好的把UI调整好.7.Android里的junit每次运行都会打包新的apk到设备上跑.效率非常慢.如果是跟android无关的测试,最好自己建立一个单纯的java项目做测试.8.面试的时候不要觉得自己提的薪水太高,物以稀为贵明白吗?不管你的期望薪资多少,都有可能实现,这只是时间问题.9.如果一家小公司通过猎头找到你,即使公司在小,也比外面那些40,50人的公司还要好.不要觉得公司不行,担心会倒闭.放心吧,至少活1年是没问题的.10.不要把自己绑在android上,有空也研究下IOS(最近小弟就准备研究ios,刚买了6本书...).11.移动互联网最少还有10年的快速增长.android最少还有两年的快速增长.走android这条路是不会错的.12.有空多学点开放平台的SDK.比如新浪微博,腾讯微博,淘宝平台,支付宝移动支付平台,快钱移动支付平台等等..这些都是不愁没市场的.13.即使技术再差,也要发布一个应用到market上去.因为这样你才了解做一个应用的逻辑.14.每个月拿到薪水省500-1000元出来.这些钱投在买学习资料,去培训班上课...在培训班,花再多的钱也是值得的.15.你真正的价值在项目经验和对底层的认识上.不要忽略基础知识.16.如果有空把Android的源代码看一下.底层的东西很枯燥,但这些很值得学.17..程序员其实是艺术家.代码重构和设计模式,是非常非常重要的东西,必须要学

18.不要去维护一个项目,要去做一个项目.19.一开始不要轻易去大公司,虽然大公司是可以让你呆一辈子的.但你的起点低,以后成就也低.20:每天早上提前20分钟上班,5分钟把今天的工作计划写好.15分钟用来看各大It论坛的新闻.21:如果以前没做过java,那就把SSH看下,自己搭建一个小服务器.这是为了接私活用.22:PS一定要学,接私活用.23:多下载市面上好的应用,每天都用,只有这样你才能了解市场.现在所有的APK都可以反编译,看源代码麻烦,但看layout和图片很容易,所以....你懂的.24.要有羞耻心.25.老板仅仅要求你把东西做完,需求完成.但你必须对自己要更严格一点.写一段代码,从网上复制一份代码,并不是可以用就行了,你还必须明白他的原理,为什么这样就可以?这才是对你最有用的地方,这也是你今后薪资增长的保证.26.要懂得舍得.移动领域发展太快,必要时必须要用钱换时间.不然你会远远落后别人(我之前花了4000大洋去培训班学IOS三天).27.要明白自己想要什么,什么才能最大性价比提高你的能力.对我来说,能让我提高最大的,就是Android和IOS同时会,并且自己可以做架构设计.28.看android技术书籍最快的学习方法,先通读一次.然后把书本上的demo一个一个写出来.不要觉得太容易不去写.很多东西都是这样,看起来简单,但做起来难.最后再对照自己写出来的程序代码去理解书本的意思.29.应用和游戏是2个方向,没有一个公司会同时做游戏又做应用,即使是外包公司,大多也只做一块.专精一个就可以了.30.每次做完一个项目,要强迫自己做总结,通过这个项目,我学到了什么新技术?犯了哪些

SB错误?

31.一家小公司,如果有正式财务部,那肯定是正规的,不要担心欠薪问题.如果没有,就说不准了.bbs.12580life.com

第四篇:Android学习总结 20110325专题

Android学习总结

在这段时间主要对Android平台有了一定的了解,对一些简单的设计也有了一定的掌握Android概念

Android是一个基于Linux核心的开放手持设备(主要是手机)平台操作系统,与Windows Moble、Symbian等手机操作系统处于同一级别。“Android大奖赛“首页上列出的可能设计方向

多媒体工具社交网络新闻、资讯工具环保、慈善协作生产力工具Android Developer Challenge(ADC)游戏实时资讯服务崭新的用户界面您想到的应用程序项目构架

src/:源代码(sourse)目录

“src”目录包含了“Android应用程序”各个程序源文件。对于上例 ”Bmi.java”是新 序项目中的主要程序块。gen/:自动生成(Generate)目录

gen目录中存放所有自动生成的文件。最关键就是R.java,这个文件是自动产生的,与”res”目录下的XML文件内容同步更新。

Android<版本号>/:参考函数目录

此目录的作用是将AndroidSDK里所有可呼叫的类、方法函数,分门别类的列出,好方便开发者来参考。

assert/:对此目录目前还不是太懂 res/:资源(Resource)目录

res目录存放所有程序中用到的资源文件。在里边还有两个经常访问的目录,分别 “layout/:页面布局(layout)目录”和“values/:参数值(values)目录”

“AndroidManifest.xml”是Android应用程序的功能列表,每个应用程序都在这个文件中,列出该程序所提供的功能。我完成的BMI程序

此程序是我参考书上的例子所完成的程序。

BMI,英文全称:Body Mass Index,中文名称:身高体重指数,是一个计算值,整个程序的思路是当我们在对应的文本框内输入身高(cm)、体重(kg),输入完成后按下“计算BMI”键,屏幕上就会显示计算结果,并弹出“你应该节食”、或“你应该多吃点”等健康建议的信息框。

健康指标的计算方法是:身高(height)/(体重(weight)/100)只要BMI值超过25时就算偏胖、BMI值低于20就算偏瘦,介于这之间算正常。

下面是我完成的程序界面:

计算得到的BMI值是20.57,在20—25之间,体型正常。由于我对两个文本框内输入的内容进行了限制,因此只容许输入数字

BMI值为25.56,信息框弹出“你该节食了”

在界面的下侧有一个“健康小常识按钮”,当点击此按钮时,会链接到一个有关健康生活小常识的网页上:

在每次点击“计算BMI值”按钮后首先会弹出一个消息框,消息框中包括两个按 钮,当点击确认按钮时消息框消失;当点击首页按钮时会连接到相应的网页

下图为点击消息框确认按钮后显示的网页:

总结

通过这段时间的学习,对于Android平台的整个基本框架有了一定的了解,对程序整个运 及相互之间的调用流程也有了一定的掌握,但感觉自己java基本功比较薄弱,还得进一步学习。由于目前还没有什么想法,我打算在后面的一段时间内主要还是继续掌握这方面知识,做一个类似于计算器之类的小软件,以巩固我这方面的知识。在查阅资料方面我还有点欠缺,尤其比较怕读英文资料,这方面还得加强。

第五篇:Android RIL&Call学习总结

Android RIL与Call代码学习总结

前言

本文分五部分:Android电信业务系统、RIL、Telephony APP Framework、Phone APP、Android通话简单流程。

1、Android电信业务系统主要叙述Android整个电信业务系统的软件架构。

2、RIL主要叙述Android Radio Interface Layer相关要点,涉及的代码主要放在hardwareril目录下。

3、Telephony APP Framework主要简述电信业务系统Framework部分代码相关要点,涉及的代码主要放在frameworksbasetelephony目录下。

4、Phone APP主要叙述Android的电话业务模块,涉及的代码主要放在packagesappsPhone目录下。

5、Android通话简单流程主要叙述从上层Phone APP发起电话的函数调用流程。

一、Android电话业务系统

简单的说由三部分组成:Telephony Application(Java)+ Telephony Frameworks(Java)+ RIL(C/C++)

二、RIL RIL(Radio Interface Layer),是Android电信业务系统和底层硬件之间的抽象层,Android提供该层方便用户移植。手机每次请求相应的电信服务,如电话、短信、网络连接等,都是通过AT指令与底层硬件进行交互的,拿电话来讲,用户请求拨打电话,需要向RIL发送相关的请求,接着RIL按照用户的请求,调用相应的AT指令发送接口给底层发送AT指令,完成用户拨打电话的流程。简单的说,对RIL的移植,主要是针对不同的设备针对AT指令做相应的修改。

1、RIL移植层的三个组成部分

1)Vendor RIL 提供AT指令发送接口 2)RIL Daemon 加载RIL相关的库同时初始化RIL,注册RIL相关函数接口。同时,RILD也是上层和底层RIL的调用中转站。3)RIL JNI Layer RIL JNI接口,提供上层Telephony APP Framework调用

2、RIL的初始化流程

加载ril.lib  RIL_Init() RIL_register(),详细可见ridl.c中的main()函数。

3、RIL接口的调用方式

有两种方式:主动请求(Solicited)和被动请求(Unsolicited)1)主动请求

2)被动请求

void(*OnUnsolicitedResponse)(int unsolResponse, const void *data,size_t datalen);

4、涉及的主要源代码文件

1)reference-ril.c  本文件涉及的重要内部函数及功能 requestRadioPower

开启通讯模块 requestQueryNetworkSelectionMode 查询网络模式 requestGetCurrentCalls

获取当前通话 requestDial

请求呼叫 requestWriteSmsToSim

写入短信至SIM卡 requestHangup

挂断电话 requestSignalStrength

获取信号强度 requestRegistrationState

获取卡注册状态 requestOperator

获取运营商名称 requestSendSMS

请求发送短信 requestSetupDataCall

拨号上网 requestSMSAcknowledge

短信回报

requestEnterSimPin

请求输入SIM PIN码 requestSendUSSD

请求USSD业务  本文件提供给ril.cpp调用的外部接口 RIL_Init

RIL初始化 onRequest

AT请求指令接口(异步方式)

getVersion

获取RIL版本号,当前为“android reference-ril 1.0” onUnsolicited

AT请求指令接口(同步方式)

2)ril.cpp 该文件主要提供ril.java调用接口,实现RIL的JNI调用方式、RIL Event管理机制  实现了供上层调用的接口 typedef struct {

int requestNumber;

void(*dispatchFunction)(Parcel &p, struct RequestInfo *pRI);

int(*responseFunction)(Parcel &p, void *response, size_t responselen);} CommandInfo;具体执行的操作可以看头文件ril_commands.h 举一个例子:

拨打电话,对应的requestNumber为RIL_REQUEST_DIAL,对应的dispatchFunction为dispatchDial,对应的responseFunction为responseFunction。 RIL Event管理

与ril_event.cpp的Event接口配合实现RIL Event管理 RIL_startEventLoop rilEventAddWakeup eventLoop ril_event_init ril_event_set ril_event_add ril_event_del 4)rild.c rild的主要初始化工作都在main函数中进行。

5、RIL JNI上层对外接口

SetOnNITZTime

getIccCardStatus

supplyIccPin

supplyIccPuk

supplyIccPin2

supplyIccPuk2

changeIccPin

changeIccPin2

getCurrentCalls

getPDPContextList dial

getIMSI

getIMEI

getIMEISV

hangupConnection

acceptCall

rejectCall

getLastCallFailCause getLastPdpFailCause getLastDataCallFailCause setMute

getMute

getSignalStrength

getRegistrationState getGPRSRegistrationState getOperator

设置网络身份和时区 获取SIM卡状态 输入PIN码 输入PUK码 输入PIN2码 输入PUK2码 修改PIN码 修改PIN2码 获取当前通话 获取PDP列表 拨号

获取IMSI 获取IMEI 获取IMEISV 挂断电话 接听电话 电话拒接

获取Call失败错误码 获取PDP失败错误码 获取拨号连接失败错误码

设置手机静音模式(静音/非静音)获取手机静音模式(静音/非静音)获取信号强度 获取卡注册状态 获取GPRS注册状态 获取运营商 sendDtmf

startDtmf stopDtmf sendSMS deleteSmsOnSim writeSmsToSim

发送DTMF Start DTMF Stop DTMF 发送短信

删除SIM卡短信 保存短信至SIM卡

6、RIL机制

RIL类有三个内部类:RILRequest、RILSender、RILReceiver,这三个内部类共同实现上层的电信业务操作请求。

RILRequest,电信服务请求,上层应用通过该类与RIL JNI层进行消息的交互,同时RIL JNI层也通过该类与RIL底层进行消息的交互; RILSender,实现上层请求的命令发送 RILReceiver,负责接收底层的Response  以下是dial的RIL调用序列 上层调用dial 设置Request请求并发送至RILSender消息处理队列

RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);…

send(rr); RILSender消息处理队列消息队列收到EVENT_SEND后往mSocket里边填写相应请求 RILD从mSocket中读取相应的请求为RIL_REQUEST_DIAL,并设置相应的event 执行dispatchDial  onRequest  requestDial发送AT指令

底层给予responseVoid的响应

RILD向mSocket填写相应的响应信息,并往RILReceiver消息队列发送  processResponse processSolicited responseVoid(JNI)

三、Telephony APP Framework概述

电信业务Framework涉及Call、SMS、SIM卡、PDP等,代码分为两个部分,一个是SDK API,一个是平台内部类,不对外开放。这部分简单的说,就是上层电信业务与底层RIL的中间层。

1、Internal Class 1)ADN(Abbreviated Dialing Numbers,缩位拨号)相关的类 AdnRecord AdnRecordCache AdnRecordLoader 2)Call相关的类

Call:基类,GsmCall和CdmaCall都由该基类扩展实现 CdmaCal GsmCall

CallTracker:基类,GsmCallTracker和CdmaCallTracker都由这个基类进行扩展实现 GsmCallTracker: CdmaCallTracker PhoneBase:基类,CDMAPhone和GSMPhone都由这个基类扩展实现 CDMAPhone GSMPhone Phone:电话操作的一些接口 CallerInfo CallerInfoAsyncQuery CallForwardInfo:呼叫转移

CallFailCause:GSM Call失败错误码 CallFailCause:CDMA Call失败错误码 3)数据连接相关类

DataConnection:基类,GsmDataConnection和CdmaDataConnection都基于该类扩展实现 GsmDataConnection CdmaDataConnection DataConnectionTracker:基类,CdmaDataConnectionTracker和GsmDataConnectionTracker都基于该类进行扩展实现 CdmaDataConnectionTracker GsmDataConnectionTracker 4)SIM卡相关类

IccCard:基类,RuimCard和SimCard都由该类进行扩展实现 RuimCard SimCard IccRecords:基类,RuimRecords和SIMRecords都基于该类进行扩展实现 RuimRecords SIMRecords IccProvider IccUtils 5)SMS相关类

SMSDispatcher:实现发送短信

SmsMessageBase:基类,SmsMessage由该类扩展实现 SmsMessage:短信PDU包解析

2、SDK API Class 实现SDK API接口,具体架构见SDK API文档

四、Phone APP Android自带一个Phone App,实现了GSM/CDMA的通话功能,这部分代码放在packagesappsPhone目录下。

Phone APP开机就运行了,可以从AndroidManifest.xml设置的应用权限看出来

。开机做如下初始化工作:

A、初始化Telephony Framework B、Power、Ringer、Keyboard、状态栏、SIM卡的注册工作 C、CallNotifier、PhoneUtils初始化工作 具体可以参见onCreate Phone APP有如下几个重要的类

 PhoneApp requestWakeState:判断手机是否可休眠 wakeUpScreen:唤醒手机

PhoneAppBroadcastReceiver:内部类,可以实时监测手机的状态,飞行模式、蓝牙耳机等。 PhoneUtils 电话基本组件接口,实现电话的一些基本操作,如Dial、Answer、Hangup、Hold等 placeCall:电话呼出 Hangup:挂断电话 answerCall:接听电话

setMute/ setMuteInternal:静音 turnOnSpeaker:免提

showIncomingCallUi:显示来电界面  InCallScreen 该类实现通话界面流程,主要如下:

case R.id.menuAnswerAndHold,保持当前通话并接听: internalAnswerCall  PhoneUtils.answerCall(mPhone)case R.id.menuAnswerAndEnd,结束当前通话并接听:

internalAnswerAndEnd  PhoneUtils.answerAndEndActive(mPhone)case R.id.menuAnswer,接听:

internalAnswerCall  PhoneUtils.answerCall(mPhone)case R.id.menuIgnore,忽略:

internalHangupRingingCall  PhoneUtils.hangupRingingCall(mPhone)case R.id.menuSwapCalls,切换通话:

internalSwapCalls  PhoneUtils.switchHoldingAndActive(mPhone)case R.id.menuMergeCalls,合并通话: PhoneUtils.mergeCalls(mPhone)case R.id.menuManageConference,管理电话会议:

setInCallScreenMode(InCallScreenMode.MANAGE_CONFERENCE)case R.id.menuShowDialpad,显示拨号键盘: onShowHideDialpad  mDialer.openDialer(true)case R.id.menuSpeaker,免提:

onSpeakerClick  PhoneUtils.turnOnSpeaker case R.id.menuBluetooth,蓝牙: onBluetoothClick case R.id.menuMute,静音:

onMuteClick  PhoneUtils.setMute case R.id.menuHold,通话保持: onHoldClick case R.id.menuAddCall,添加通话: PhoneUtils.startNewCall(mPhone)case R.id.menuEndCall,结束通话: internalHangup  PhoneUtils.hangup(mPhone) DTMFTwelveKeyDialer 该类实现DTMF processDtmf:发送DTMF clearDigits:清除DTMF键码 startDtmfTone:播放DTMF Tone stopDtmfTone:停止播放DTMF Tone  CallNotifier 继承于Handler,用来实时监测通话状态并通知Phone Application,如PHONE_NEW_RINGING_CONNECTION(来电),PHONE_INCOMING_RING(来电响铃),PHONE_DISCONNECT(通话挂断),PHONE_BATTERY_LOW(电池电量低),具体相对应的处理可参见handleMessage  CallFeaturesSetting 实现通话设置,此外该类包含一个内部类VoiceMailProviderSettings用来实现语音信箱的设置

 CallCard/ InCallTouchUi 这两个类都是继承于FrameLayout,Phone用来实现通话自身的布局需求。

updatePhotoForCallState:更新替代图片(如果通话号码有设置特定代替图片的)updateDisplayForConference:通话UI更新(用于电话会议)updateDisplayForPerson:通话UI更新

getCallFailedString:获取通话失败错误字符串 displayOnHoldCallStatus:显示通话保持UI displayMainCallStatus:更新通话UI updateState:更新通话状态(供外部类调用) BluetoothHandsfree/BluetoothHeadsetService 实现通话蓝牙耳机功能,其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它。BluetoothHeadsetService 通过接收底层蓝牙服务的状态消息来改变自身状态,同时它也会监听通话的状态变化。onBluetoothEnabled:开启蓝牙设备 onBluetoothDisabled:关闭蓝牙设备 connectHeadset:连接蓝牙设备 audioOn:开启audio audioOff:关闭audio redial:通过蓝牙设备重播电话 updateBatteryState:更新电池强度 updateSignalState:更新信号强度

五、Android通话简单流程

1、拨打流程(以电话本入口为例)

进入电话本,以某个联系人发起呼叫,此时进入TwelveKeyDialer类的onClick函数case R.id.dialButton分支,启动OutgoingCallBroadcaster Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//以新的TASK启动 OutgoingCallBroadcaster发出Broadcast Announcement sendOrderedBroadcast(broadcastIntent, PERMISSION,new OutgoingCallReceiver(), null, Activity.RESULT_OK, number, null);收到Broadcast后,进入OutgoingCallReceiver中的doReceive启动InCallScreen 进入internalResolveIntent mInCallInitialStatus = internalResolveIntent(getIntent());placeCall PhoneUtils.placeCallVia/ PhoneUtils.placeCall  Connection cn = phone.dial(number);Phone是Interface,所属的dial接口是在PhoneBase的子类GSMPhone中实现 进入GsmCallTracker类中的dial函数 mCT.dial(newDialString);调用CommandsInterface的dial接口

cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());CommandsInterface的dial接口是在RIL.java中实现的 调用JNI接口dial ……后续就是RIL JNI与libril的交互过程,见RIL机制

2、来电流程

CallNotifier的消息处理队列会收到PHONE_NEW_RINGING_CONNECTION onNewRingingConnection响铃或震动(来电自动接听也在里边处理)显示来电界面InCallScreen PhoneUtils.showIncomingCallUi();

3、来电处理

 接听

internalAnswerCall

PhoneUtils.answerCall(mPhone)

关闭来电铃声等,进入接听流程phone.acceptCall()调用GsmCallTracker的acceptCall mCT.acceptCall();调用CommandsInterface acceptCall 接口 cm.acceptCall(obtainCompleteMessage())

调用RIL JNI接口acceptCall向底层发送请求

……后续就是RIL JNI与libril的交互过程,见RIL机制  挂断

 internalHangup  PhoneUtils.hangup(mPhone) 调用GsmCallTracker的handup 调用CommandsInterface hangupConnection接口

cm.hangupConnection(conn.getGSMIndex(), obtainCompleteMessage());调用RIL JNI接口hangupConnection向底层发送挂断请求 ……后续就是RIL JNI与libril的交互过程,见RIL机制  通话保持恢复

PhoneUtils.switchHoldingAndActive(mPhone) 添加一个新通话,实现多方通话 PhoneUtils.startNewCall(mPhone)

Android_Phone源代码来电流程解读

***************************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()

方法启动响铃。

********************************Ringer*************************** Ringer的ring()方法会启动相应的响铃方式。

响铃之后将会又Message发送,其内容为PHONE_STATE_CHANGED

*******************************InCallScreen**********************

InCallScreen将会接受到发送的PHONE_STATE_CHANGED消息,然后调用onPhoneStateChanged()方法

该方法将更新屏幕,CallNotifier的onCustomRingQueryComplete里也会通过PhoneUtils.showIncomingCallUi()

来启动InCallScreen屏幕。然后由InCallScreen处理,处理方式与前面打电话的大体一致,不过该类第一次调用时执行了

onCreate()方法,但是以后执行都是从onNewIntent()开始.

下载Android学习之TextView属性总结word格式文档
下载Android学习之TextView属性总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Android的学习总结

    Android学习总结 Android的学习总结 现在对于Android的学习已有斗个学期了,但它对我来说其实还是一个大大的谜,还有待我去对它一一揭晓。 在还没有学习Android这门课之前,当听......

    android PopupWindow学习总结[合集]

    PopupWindow学习总结经过一段时间的学习,了解了PopupWindow的基本用法,如下: 1、为PopupWindow的view布局,通过LayoutInflator获取布局的view.如: LayoutInflater inflater =......

    Android 学习总结1(范文)

    1应用程序配置全屏 应用程序配置全屏: 【bug】 但是系统提示的是: android:style/Theme_NoTitleBar_Fullscreen ——错误的配置 Android的bug。去掉标题栏: android:theme="@a......

    Android总结

    Android四大组件: Activity—表现屏幕界面Service—后台服务 BroadcastReceiver—实现广播机制ContentProvider—实现数据存储 Intent类:用来启动程序并传递信息的类 用于A......

    Android数据共享之ContentProvider总结

    Content Provider 由上一节内容,我们了解到Adroid的数据都是私有的,那么对于像通讯录之类,多个APP(拨号、通话、短消息…)都需要共享使用,该怎么实现呢? 答案就是ContentProvide......

    Android地图和定位学习总结

    Android地图和定位学习总结 首届 Google 暑期大学生博客分享大赛——2010 Android 篇 android.location包下有这么一些接口和类: Interfaces GpsStatus.Listener GpsStatus.N......

    android vold学习总结(五篇范文)

    vold学习总结 Vold(volume daemon):源码路径android/system/vold,部分引用代码位于android/system/core/libsysutils/src,android/system/core/include/sysutils/下。 它用于......

    Android应用程序设计学习总结

    学习总结 Android具有开放性。有一下平台优势: 一、开放性 在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以......