Android应用框架原理
文章平均质量分 66
lsdmx2016
这个作者很懒,什么都没留下…
展开
-
AsyncChannel 的作用
1. AsyncChannel 是两个不同的Handler 的传递消息通道,这两个Handler 有可能是在同一个进程,也有可能是在不同的进程,如果是在不同的进程则需要借助Binder 的IPC 机制进行通信。 2.Messenger 与handler 相关联,Messenger 将消息发送给对应的Handler去处理,Messenger=new Messenger(handler),如果h原创 2012-12-07 14:17:37 · 8184 阅读 · 1 评论 -
将Android系统中的out目录从源代码目录中分离
Android系统编译成功后的代码默认放在源代码目录下的out目录中,我们需要将out目录分离出来,可以在环境变量中添加 OUT_DIR_COMMON_BASE="/androidsource/out",如果你的工作目录中存在 /work/android_branch1,/work/android_branch2,这样的几个分支源码,那么 他们编译完成后将会在 /androidsource/out原创 2013-08-12 17:10:48 · 3072 阅读 · 0 评论 -
对AudioService 的认识(1)
AudioService 是一个 Java 服务,主要用于控制音频输入输出的过程,如调节音量大小,设置音量模式,设置蓝牙音频的模式,我现在具体分析和AudioService 相关的软件层。 它主要是为向应用层提供控制音频输入输出的过程的接口。1.Application FrameworkAudioManager.java AudioManager 持有IAudioService原创 2013-05-13 17:55:36 · 2418 阅读 · 0 评论 -
对于AudioTrack的认识(1)
AudioTrack 主要的作用是播放音频,它是通过本地代码实现的。我主要是从两个方面分析AudioTrack,一是AudioTrack的系统架构,而是AudioTrack的使用。AudioTrack的架构。 在android4.2.1中与 AudioTrack相关的代码分布在如下软件层中。1. Application FrameworkAudioTrack.java(frame原创 2013-05-13 17:54:05 · 1436 阅读 · 0 评论 -
Android4.X 应用层读取SIM卡联系人的过程
SIM卡里可以存储部分联系人数据 ,USIM卡也可以存储部分联系人数据,只不过USIM卡存储的联系人的数量更多,以及支持更多的联系人数据字段。 在Android 的应用层 是通过IccProvider 来读取SIM卡里的联系人的,主要有三个步骤 1.IccProvider 根据 EF_ID ,调用 IccPhoneBookInterfaceManager 的getAdnRecordsI原创 2013-12-24 14:56:13 · 5931 阅读 · 1 评论 -
对IccCardProxy 的认识
IccCardProxy 主要是对IccCard的实现,它主要有如下几个功能。 通过 UiccController,获取UiccCard,UiccCardApplication,IccRecords 的最新状态。 1.通过 UiccController监听SIM卡的变化信息 mUiccController = UiccController.getInstance原创 2013-06-09 16:30:22 · 5410 阅读 · 0 评论 -
对UiccCardApplication的认识
UiccCardApplication,描述智能卡应用的信息,在UiccCard 中创建,主要包含如下内容 对应的卡的信息,如APPState,AppType 读取卡信息的对象,如IccFileHandler,IccRecrods 对卡状态的数据监听器,如 mReadyRegistrants UiccCardApplciation只会创建一次,一旦卡的状态发生变化,UiccC原创 2013-06-09 16:29:36 · 2926 阅读 · 0 评论 -
对UiccCard的认识
UiccCard 在UiccController 中创建,对应实际的智能卡,当添加卡和移除卡的时候,在这个类中都会有所体现,它持有卡的状态的监听器,它主要有三个功能。 维护卡的状态和PIN码锁定状态 创建卡的UiccCardApplication 创建 CatService,这个对象和 Stk有关。 当SIM卡的状态发生变化时,update的方法会被调用。原创 2013-06-09 16:26:05 · 2977 阅读 · 1 评论 -
Android消息队列处理消息
Looper中的MessageQueue中持有一个mMessages的对象,用于保存,它所获得的消息对象。Looper通过,它的next方法进行消息循环,如果发现了消息,就将mMessages 交给对应的target 处理 Message next() { int pendingIdleHandlerCount = -1; // -1 only during first i原创 2013-12-19 14:08:37 · 1842 阅读 · 0 评论 -
Android应用程序消息循环
Android应用程序的消息处理框架,是通过 Looper,Handler,MessageQueue,这三个类实现的,Looper 是一个消息循环,它维护着一个MessageQueue,Looper 是和某个线程相关的,Handler 也是和线程相关的,一个Looper 对应着一个Handler,Handler 就是用来发送和处理与它相关的线程的消息队列的消息的。 Android应用程序在原创 2013-12-19 13:54:33 · 3244 阅读 · 0 评论 -
Android4.X 的SIM卡信息的初始化过程
Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中。SIM卡的数据信息的初始化过程主要分为如下几个步骤 RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理。 Phone 应用初始化 Phone 对象时会建立一个 RIL原创 2013-12-24 17:00:30 · 9567 阅读 · 0 评论 -
对IccCardStatus 的认识
IccCardStatus 用于描述手机所插入的手机卡的信息,包括卡的状态,PIN码锁定的状态,所包含的应用的状态信息。RIL.java 中获取得到SIM卡的信息后,将信息封装成IccCardStatus返回给UiccController. 具体的成员变量如下 CardState ,描述SIM卡的状态, public enum CardState {原创 2013-06-09 16:32:10 · 6099 阅读 · 0 评论 -
对Android4.X窗口的认识
窗口,可以理解为一个可以提供给用户交互的用户界面,在这个界面里,用户可以通过物理按键事件,触摸事件等输入事件和应用程序或者系统进行交互。总体来说,窗口就是一个可交互的ViewGroup,Android系统在某一时刻只会有且只有一个窗口获得焦点并且处于活跃状态,可以接收各种事件。窗口参数包括大小,类型等。在Android系统里,窗口主要有如下几种窗口应用窗口(Wind原创 2013-12-19 13:50:57 · 979 阅读 · 0 评论 -
Android 4.X 读取SIM卡短信和联系人的相关类
1.IccSmsInterfaceManager 这个类的主要作用有两个 通过 SMSDispatcher,发送短信数据 更新和查询SIM卡的短信数据 IccSmsInterfaceManager 是一个Binder 服务类,Binder接口是 ISms. IccSmsInterfaceManager 被创造时 Binder服务会被注册。 I原创 2013-12-26 15:46:20 · 2719 阅读 · 0 评论 -
android中添加native服务的权限问题
android 系统中的服务可以分为两种 1.Android Java Service,主要存在于 SystemServer 程序中,主要通过AIDL语言来定义以及实现,如PhoneInterfaceManager. 2.Android Native Service, 主要存在于 系统程序(如mediaserver)或者自定义的程序中。如 CameraService,AudioFlinge原创 2013-04-28 09:41:35 · 2888 阅读 · 0 评论 -
Android4.1中BinderService的作用
Android4.1 中出现了一个新的类,BinderService,所有的Native Service 都会继承这个类。class BinderService{public: static status_t publish(bool allowIsolated = false) { sp sm(defaultServiceManager());原创 2013-04-08 15:05:15 · 4429 阅读 · 0 评论 -
数据连接核心类(java层)
1.DataConnectionTracker. DataConnectionTracker 就是一个 Handler ,处理与数据连接相关的各种消息,是数据连接的核心类,也就是发起数据连接以及处理数据连接状态的主体类,主要工作如下: 做数据连接的前期准备工作,如检查apn,DataConnectionAc,等。 初始化DataConnection,DataConnecti原创 2012-12-10 11:13:22 · 3570 阅读 · 0 评论 -
STK应用没有显示
STK应用在源代码中是有源代码的,在android系统启动的过程中这个应用在理论上讲是应该被启动的。但是在没有SIM卡或者RIL层出现问题的时候,我们在应用列表里是无法看到这个应用的图标的。这种使某个应用不在应用列表里显示的功能是通过如下代码实现的。 private static void setAppState(Context context, boolean install, int原创 2012-12-24 13:32:53 · 3617 阅读 · 0 评论 -
Stk简介和核心类(android4.0 RIL Framework Java 部分)
STK 或者 UTK 就是 Sim Tool Kit (sim卡工具包),定制了一系列与运营商相关的应用(查询天气,话费,彩铃等),可以理解为安装在SIM卡上的应用。目前对用户来说,基本上没有什么实际作用,google 自带了一个stk 应用。运营商将相关应用保存在SIM卡中,stk应用需要从SIM卡中读取相关应用信息,SIM卡也会向stk应用主动上报应用信息。 Stk应用和SIM卡之间的通信原创 2012-12-14 17:33:35 · 6084 阅读 · 1 评论 -
android4.0来电过程(RIL Framework Java部分)
1.RILReceiver 接收到unsolicited message RIL_UNSOL_CALL_RING,处理该消息 if (mRingRegistrant != null) { mRingRegistrant.notifyRegistrant( new AsyncResult原创 2012-12-11 13:35:08 · 3099 阅读 · 0 评论 -
android4.0去电过程(RIL Framework Java 部分)
1.DialpadFragment 的 dialButtonPressed(),用户输入号码(不是紧急号码)后,按下该键,dialButtonPressed 方法被调用。 private Intent newDialNumberIntent(String number) { final Intent intent = new Intent(Intent.ACTION_CA原创 2012-12-11 15:38:43 · 2222 阅读 · 0 评论 -
android4.0通话管理核心类(RIL Framework Java 部分)
GsmCall,通话,是指通信双方(自己和别人)的通信的过程,一个通话可以有多个通话连接,一个通话连接只能属于一个通话,比如正在等待的通话,正在接通的通话,正在转接的通话等,每一个通话都有自己的状态。 DriverCall ,描述来电信息,如号码,状态等信息,就是AT+CLCC GsmConnection 就是一路通话连接,有两种类型 接收型。接的电话,MT call,需原创 2012-12-12 15:21:26 · 1878 阅读 · 0 评论 -
android4.0网络服务状态或者信号量强度上报过程(RIL Framework Java 部分)
网络服务状态或者网络信号量是通过Modem 主动上报信息来实现的,相关类有ServiceState,GsmServiceStateTracker,GSMPhone,TelephonyRegistry等。 1.比如现在所处的网络发生变化,RILReciver 收到上报信息,处理 RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED 信息。 cas原创 2012-12-12 16:59:17 · 6856 阅读 · 0 评论 -
Android4 .1添加新的按键(1)
在Android 系统中定义了大量的物理和虚拟按键,比如返回键,home键,数字键等。现在有这样一个需求,要在现有的开发板上添加一个新的物理按键。 在添加按键之前,需要了解Andorid 系统的按键软件架构,以物理按键为例。 1. 按键驱动层 将物理按键的键值上报给按键框架层。在手机的文件系统中,有这样的一个目录 /dev/input,按键框架层,就是通过检测这个目录原创 2013-02-24 14:16:04 · 3216 阅读 · 0 评论 -
Android4.1添加新的按键(2)
Android 系统对加载键盘布局文件(Generic.kl ). 在 开发板的文件目录 /system/usr/idc 中有一系列的 *.idc 框架层会根据驱动中的配置,自动生成设备的idc 文件。 例如在 EventHub.cpp 中的 loadConfigurationLocked 方法中,会获取设备的idc 文件。如果没有获取到idc 文件,那么会采用默认的Generic.原创 2013-02-24 14:16:48 · 4158 阅读 · 0 评论 -
Android4.1添加新的按键(3)
添加新的物理按键 DECT_REGISTER, DECT_PHONE1.kl文件添加按键码映射,251,252 是 驱动上报上来的键值key 251 DECT_REGISTERkey 252 DECT_PHONE2.frameworks/base/include/androidfw/KeycodeLabels.h 对KEYCODES,添加按键码static const K原创 2013-02-24 14:17:40 · 7205 阅读 · 1 评论 -
Android4.1添加新的按键(4)
添加新的按键过程中可能出现的问题 1.按键框架层中相关变量都添加后,keycode=0. 确保驱动上报键值的准确性。 确保确定设备的kl文件。根据 /system/usr/idc 中的idc 文件,以及 在EventHub.cpp中打印 设备的配置 文件,确定设备的kl 文件,设备不止一个kl文件 kl 文件的键值映射正确。 key原创 2013-02-24 14:19:25 · 1890 阅读 · 1 评论 -
jni的引用
局部引用1.在jni函数中创建的引用,主要通过以下两种方式创建 NewLocalRef函数创建常用函数,findClass,GetMethodId,等。2.局部引用能够阻止虚拟机的垃圾回收器的回收工作。不能用static 来修饰局部引用。static jstring name=(*env)->NewStringUTF(env,"123");//这个是错误的,static 变量的原创 2013-02-27 18:53:36 · 805 阅读 · 0 评论 -
jni的异常处理
1.jni的代码是在虚拟机中处理的,所以为了代码调试的方便,当jni代码中出现异常时,我们需要将异常信息告诉java. 2.对于异常的处理,我们需要两个步骤 发现异常。 处理异常 3.发现异常。 通过返回值发现异常。 在可能发生异常的代码后面,判断这段代码中的返回值是否不正常,如果不正常,那么肯定出现了异常,这种方式在C 语言中非常常见。原创 2013-02-27 18:54:09 · 2152 阅读 · 1 评论 -
对UiccController 的认识
UiccController 是对SIM卡管理的控制器,它通过 UiccCard 来更新SIM卡的信息。 1.UiccController 注册了两个监听器,来监听RIL的消息。分别监听 UNSOL_RESPONSE_RADIO_STATE_CHANGED 和 RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED,当radio 和 sim卡状态发生变化时,它会第一时间得原创 2013-06-09 16:22:38 · 5986 阅读 · 0 评论