
Android
文章平均质量分 90
工程师阿杜
拓荒人
展开
-
Android的onTouchEventon、dispatchTouchEvent、InterceptTouchEvent按键消息派发流程(原)
Android自定义View时按键消息流程是绕不过去的知识点,其中又涉及到三大方法onTouchEvent、dispatchTouchEvent、onInterceptTouchEvent,他们之间的关系如何?优先级如何?出现矛盾时又会采取怎样的处理方式,我们这一节来做一下测试。1.Demo源码 搭建的Demo示例也比较简单,分别创建了TouchEventFlowActivity、To原创 2018-02-01 14:27:59 · 748 阅读 · 0 评论 -
网络连接评分机制之NetworkMonitor(原)
本节介绍一个比较特殊的流程,就是网络可用性对评分的影响。 该影响主要体现在,当一个网络连接建立时,系统将用该连接Ping一个Google的网站来判断该连接是否真的可以上网,如果不可以,那么就会扣掉该网络40分,从而可能导致该网络的评分低于其他网络评分,下面来看详细过程。一、NetworkMonitor来源 在前面我们分析过,当某个Networ原创 2015-10-08 14:17:36 · 14117 阅读 · 1 评论 -
网络连接评分机制之NetworkFactory(原)
在开机时,各个提供网络连接的对象需要向ConnectivityService注册自己,并把自己所提供的网络的分值告诉ConnectivityService。 为了ConnectivityService便于统一管理,每一个具备提供网络服务的对象都需要创建一个NetworkFactory的子类对象,并利用该对象注册自己,以及提供自己的分值。一、NetworkFactory原创 2015-10-08 13:51:53 · 10337 阅读 · 1 评论 -
网络连接评分机制之再谈WIFI与数据切换过程(原)
前面几节介绍了网络评分机制的运行流程,下面我们再次通过案例来梳理一下评分机制在使用过程中的体现。 用户原本在用数据上网,但是如果到了一个有WIFI的环境,并连接上了WIFI,此时用户的手机将会自动断开数据网络,这是如何做到的呢? 当用户来到WIFI环境时,如果连上了某个WIFI,那么此时的WIFI状态机将会进入L2ConnectedState状态,然后会更新当前原创 2015-10-08 14:26:49 · 7681 阅读 · 8 评论 -
网络连接评分机制之NetworkAgent(原)
前面介绍了开机过程中各个网络提供者的初始化过程,其实就是创建自己的NetworkFactory,并将其注册到ConnectivityService。而在介绍NetworkFactory的时候,我们看到该类的官方注释中有这么一句描述: "A NetworkFactory is an entity that creates NetworkAgent objects."原创 2015-10-08 14:06:32 · 12843 阅读 · 1 评论 -
AsyncChannel的使用和原理(原)
本文主要介绍AsyncChannel的使用和内部原理。一、AsyncChannel概述 AsyncChannel在Wifi的处理机制中被大量使用,但是可惜的是该工具是一个internal的方法,没有开放给第三方应用使用,但是该工具提供的思路很有用,可以被扩展到任意两个Handle间传输数据的通道。 那么AsyncChannel究竟是什么工具呢?他的内原创 2015-09-02 16:00:47 · 16927 阅读 · 8 评论 -
利用ADB Root权限破解锁屏密码(原)
本文主要介绍Android ENG版本以及Root授权过ADB进程的手机解锁方法。一、破解方法1.1、破解条件 该方法适用范围较为特殊,分为两种: 1、手机是ENG版本。 2、手机被ROOT,并且ADB可以直接升级为ROOT用户。 第一种情况一般出现在某些工程机中,而第二种情况往往是手机被Roo原创 2015-08-20 15:58:48 · 60566 阅读 · 6 评论 -
Wifi服务框架介绍(原)
本文简要介绍WIFI服务的主要框架以及运作机制。 WIFI框架主要涉及到以下几个对象:WifiService、WifiManager、WifiServiceImpl、WifiStateMachine等。下面来介绍这四个对象的内在联系。一、WIFI服务的初始化 WIFI服务的初始化分为两个部分,WifiService的初始化和WifiManag原创 2015-09-08 15:09:45 · 15354 阅读 · 5 评论 -
Android拨号盘列表加载机制(原)
本文档主要介绍Android4.4默认拨号盘界面的列表加载机制。一、拨号列表界面概述 从DialtactsActivity所加载的布局中可以看出,在拨号界面的显示列表位置,复用了三个Fragment:PhoneFavoriteFragment、SmartDialSearchFragment和RegularSearchFragment,后两个Fragment是在界面处于搜索状态原创 2014-10-22 09:56:21 · 6868 阅读 · 4 评论 -
Framework中的连接管理机制(原)
上一节《Wifi服务框架介绍》介绍了WIFI的大致框架,本文主要介绍连接管理中的几个重要角色,包括:NetworkInfo、NetworkAgent、ConnectivityService、ConnectivityManager等。 为了便于讨论,本文选取一个具体问题展开分析,那就是:当当前的网络连接变为不可用时,系统如何自动切换其他可用的网络连接的。 我们知道原创 2015-09-21 17:40:25 · 19508 阅读 · 9 评论 -
数据业务建立流程之DcTracker创建过程(原)
一、DcTracker介绍 DcTracker是Telephony框架中负责数据业务的核心(类似于GsmCallTracker是通话业务核心,GsmServiceStateTracker是网络CS业务的核心),所有对数据网络的请求(打开关闭数据开关、切换数据卡、修改APN参数等)都会发送到该处理中心来处理。本节所涉及的大部分代码也都在该对象中。下面我们先来看该对象的初始化原创 2015-11-02 16:19:39 · 10199 阅读 · 2 评论 -
Android短信发送流程之长短信发送(原)
从前面《Android短信发送流程之普通短信发送》流程看到,长短信与普通短信的流程从SmsManager的sendMultipartTextMessage()方法开始区分,现在我们来看长短信的流程: @SmsManager.java public void sendMultipartTextMessage( String destinationAddress, Str原创 2015-12-12 08:41:06 · 4296 阅读 · 1 评论 -
高通平台ModemBindingPolicyHandler和ModemBindingPolicyHandler作用(原)
做高通平台双卡项目的时候,高通在Telephony模块中添加了ModemBindingPolicyHandler和ModemStackController两个对象,今天我们来看一下他们的作用。由于这两个对象都是高通自己添加的,因此不方便贴出太多的源码,我们简要看一下其作用和原理。 高通之所以在AP侧添加这两个对象,是和其双卡的协议栈结构相关的。 我们知道虽然双卡原创 2016-02-19 16:46:09 · 1982 阅读 · 0 评论 -
Android运营商名称显示之PLMN与SPN显示规则(原)
前面的两节分别介绍了PLMN和SPN的读取方法,那么在锁屏、状态栏、通知栏这些地方的运营商名称究竟是来自于PLMN呢?还是来自于SPN呢? 在3GPP中规定的运营商名称显示规则如下: 1、名称可以为SPN或PLMN 2、如果没有SPN文件,那么就显示PLMN 3、若有SPN,并且注册的PLMN是HPLMN或者注册的PLMN在S原创 2016-02-17 20:06:04 · 12551 阅读 · 2 评论 -
Android运营商名称显示之SPN的读取(原)
SPN(Service Provider Name)就是当前发行SIM卡的运营商的名称,可以从以下两个路径获取: 1、从SIM文件系统读取 2、从配置文件读取 我们本节就来分析该字串的读取过程。一、从SIM读取SPN过程 一般来说,SIM上保存有当前SIM的发行运营商名称,也就是SPN,该字串可以存储在SI原创 2016-02-17 20:01:05 · 17212 阅读 · 0 评论 -
Android运营商名称显示之PLMN的读取(原)
Plmn的全称是Public Land Mobile Network(公共陆地移动网络),而在运营商显示方面主要是指当前SIM所驻留的网络,比如当中国移动的SIM(46000)如果漫游到联通的网络(46001),那么虽然当前的SIM是中国移动,但是他的Plmn就应该是中国联通。 也就是说,Plmn的名称与当前驻留的网络相关。 那么Plmn的来源是什么呢?原创 2016-02-17 19:50:50 · 18951 阅读 · 2 评论 -
Android运营商名称显示(原)
Android运营商名称的显示对用户来讲可能很少人注意到,但是对Telecomm的开发者来说,却有着不少的学问,虽然3GPP里面已经有明确的显示规则,但是在项目开发中却总能遇到各种特殊的运营商需求。在接下来的几节中我们就来对这个小小的字串显示进行分析。 Android平台的运营商名称主要显示在以下几个位置:1、锁屏时的状态栏,如图: 2、解锁后的下拉通知栏,原创 2016-02-17 19:41:07 · 7111 阅读 · 0 评论 -
Qualcomm平台qcril初始化及消息处理流程(原)
本节主要来介绍Qcril的初始化流程以及消息在Qcril中如何传递。Android平台不同厂商的AP侧可以相同,但是Modem侧肯定会有很大的差异,RILC要解决一个问题就是适配不同厂商的Modem,为了达到兼容性要求,Android在AP与Modem之间搭建了RILC的框架,由不同的Modem厂商将自己的协议连接到AP侧。对于高通平台来说,他的RILC就是QCRIL。原创 2016-01-30 17:58:35 · 13519 阅读 · 2 评论 -
Android短信发送流程之普通短信发送(原)
我们先来看最简单的流程入手分析,即收件人只有一个,而且不是长短信的情况。一、地址有效性检测 当点击发送按钮时,触发onClick事件: @ComposeMessageActivity.java public void onClick(View v) { if ((v == mSendButtonSms原创 2015-12-12 08:25:59 · 7355 阅读 · 1 评论 -
Android短信发送流程之多收件人发送(原)
前面的《Android短信发送流程之长短信发送》中介绍了长短信对于普通短信的区别,而对于多收件人的情况,在SmsMessageSender的queueMessage()方法中我们了解到,发送之前,将多收件人的短信进行拆分,放入"content://sms/queued"队列中,在接下来的流程中,将会在SmsReceiverService中通过sendFirstQueuedMessage()方法取出原创 2015-12-12 08:54:44 · 3355 阅读 · 1 评论 -
Telephony之TelephonyManager(原)
Telephony之TelephonyManager一、TelephonyManager概述 TelephonyManager主要提供Telephony相关实务的处理能力,我们从他所提供的public方法来总览一下其所能提供的功能:原创 2014-10-20 09:49:29 · 6623 阅读 · 1 评论 -
Telephony之PhoneInterfaceManager(原)
一、概述 PhoneInterfaceManager是一个Service,在被创建时通过ServiceManager注册自己,他作为Telephony对外的接口,可以接受其他进程向Telephony的请求,我们通过该Service所继承的AIDL文件就能看到他所提供的具体功能:原创 2014-10-20 09:34:39 · 7046 阅读 · 2 评论 -
Binder源码分析之Java层(原)
前面的几节中我们介绍了Native层Binder通讯的原理和用法,那么在Java层如何使用Binder通讯呢?其原理又与Native层的Binder有什么关系呢? 与Native层的ServiceManager类似,Android在Java层也有一个ServiceManager用于处理Java层Service的注册、申请。只不过,Java层的这个ServiceManager,其实原创 2014-03-11 14:38:51 · 3830 阅读 · 1 评论 -
Binder源码分析之Native层(原)
前面两节中介绍了Binder机制中的ServiceManager和Binder驱动,在这一节中,我们来介绍Native中的Binder通讯。 为了更好的理解过程,我们挑选Native中的MediaServer进行分析。 一、MediaServer加载过程 Android启动过程中会去执行init.rc脚本,在这个脚本中将会启动一些关键的系统服务,其中之原创 2014-03-10 15:31:37 · 7479 阅读 · 7 评论 -
Binder源码分析之驱动层(原)
前言 在《Binder源码分析之ServiceManager》一文中我们介绍了利用Binder进行通讯的流程,即ServiceManager把自己注册为“管理员”之后,负责其他Service的add操作,或者其他Client的get操作。在这个过程中,有一些接口我们并没有深入分析,比如: 1、打开Binder open("/dev/binder",原创 2014-03-04 19:30:50 · 8760 阅读 · 3 评论 -
Binder源码分析之ServiceManager(原)
ServiceManager作为Native层Service的管理员,有着极其重要的作用,主要表现两个方面: 1、对于服务端来说,系统所有的服务提供者都需要向ServiceManager注册。 2、对于客户端来说,所有客户端如果想要获得某个系统服务的代理,必须向ServiceManager申请相应的服务端代理。 下面从源码分析ServiceMa原创 2014-02-24 20:12:34 · 5594 阅读 · 1 评论 -
ContentProvider源码分析(原)
一、前言 ContentProvider作为Android四大组件之一,承担着数据存储的作用,本文用一个最典型的删除(delete)操作,按照Android源码,从应用层的getContentResolver()入手,一步步的分析到ContentProvider内部,最终到达SQLite的操作。 getContentResolver().delete();原创 2013-11-06 15:47:08 · 8539 阅读 · 8 评论 -
Android短信接收过程源码分析(原)
本文主要讨论RILJ接收到一条普通短消息时是如何把它转换成Broadcast发送到系统中的。一、GsmSMSDispatcher注册监听过程 在《Framework层中的RIL》一文中我们介绍过,Framework与应用层中的Phone对象其实就是用GSMPhone对象生成的PhoneProxy对象(CDMA制式不谈)。可以简单的理解为Phone就是GSMPhone对原创 2013-10-14 10:53:23 · 6689 阅读 · 1 评论 -
Framework中的TelephonyManager(原)
一、TelephonyManager的作用 我们先来谈谈TelephonyManager的作用。 对于这个问题,我们看TelephonyManager提供的几个重要接口就可以知道: //得到软件版本 getDeviceSoftwareVersion() //得到设备的ID,IMEI或者MEID getDeviceId()原创 2013-09-29 17:56:25 · 6627 阅读 · 2 评论 -
Android呼出电话流程(原)
我们从按下拨号开始分析呼出电话的流程。此流程从拨号盘分析到RIL层。一、应用层的流程1.1、拨号盘初步处理 @DialpadFragment.java public void dialButtonPressed() { //得到号码 final String number = mDigits.getText().toString()原创 2013-10-01 11:38:40 · 11114 阅读 · 7 评论 -
Uicc之UiccController(原)
UiccController是整个UICC事务处理的入口,负责对外提供IccRecords、IccFileHandler、UiccCardApplication等对象,并完成整个UICC系统的初始化工作。 一、UiccController提供的主要功能 我们通过其提供的public方法来看他的主要功能:原创 2014-07-31 19:44:14 · 3969 阅读 · 1 评论 -
Uicc之UiccCard(原)
UiccCard本身并不实现具体的功能,只是作为间接接口向UiccController提供UiccCardApplication对象和完成CatService的创建工作,以及当SIM卡被插入或者拔出时弹出提示框是否需要重启设备。一、UiccCard的主要功能 我们从UiccCard提供的主要方法来看其功能。 public boolean isApplicatio原创 2014-08-01 17:47:52 · 3167 阅读 · 0 评论 -
Uicc之UiccCardApplication(原)
UiccCardApplication所担任的任务主要包括创建并向外提供IccFileHandler、IccRecords对象、提供对SIM卡状态的监听等。一、UiccCardApplication的主要功能 我们从UiccCardApplication提供的public方法来查看其提供的主要功能。原创 2014-08-02 14:42:36 · 3680 阅读 · 1 评论 -
Telephoney框架总结(原)
Telephony框架概述 无论手机发展到如何智能的程度,最关键和重要的功能仍然是通讯,具体来说就是打电话、发短信、上网功能的使用。而整个Android通讯的框架从下往上可以分为4个层次: 1、Modem ----这是整个通讯的硬件基础,需要Modem芯片,不同制式需要采用不同的Modem; 2、RIL ----为了适配不同的Modem芯片而抽象出来的原创 2014-10-17 11:20:02 · 5073 阅读 · 0 评论 -
Telephony之进程与实体(原)
一、Telephony进程 整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。而这个进程是在packages\services\Telephony模块中被创建的(Android4.4平台)。并且该模块在AndroidManifest.xml中有如下关键的声明: android:pe原创 2014-10-17 11:29:22 · 4404 阅读 · 0 评论 -
Telephony之TelephonyRegistry(原)
一、TelephonyRegistry概述 TelephonyRegistry的作用是检测当前Radio的状态,包括通话、短信、数据连接等状态,当这些状态发生改变时,通知所有向他注册过的客户端。也就是说,他负责Radio状态的通知。 本质上来讲,TelephonyRegistry是一个Service,在开机时通过SystemServer添加到ServiceMan原创 2014-10-17 17:37:36 · 4333 阅读 · 2 评论 -
Telephony之GsmCallTracker(原)
在前一篇《Telephony之进程与实体》中我们分析了,Application如果要发起通话相关的动作,可以通过Telephony的实体对象,也就是Phone对象来发起请求,而Phone对象就会通话相关的请求通过GsmCallTracker转发给RILJ,然后传递给Modem。 所以,GsmCallTracker是Phone对象和RILJ之间通话相关事务的接力者。一、GsmC原创 2014-10-17 15:56:59 · 3655 阅读 · 1 评论 -
Android拨号搜索机制源码分析(原)
本文主要介绍Android4.4拨号界面的联系人搜索机制。 拨号搜索机制分为两个部分,引导搜索和搜索。其中引导搜索是指,从用户输入到开始搜索之间的流程,而搜索部分是指,从数据库搜索字符串的过程。一、引导搜索部分 默认的拨号界面的布局从上到下主要分为3个部分:显示列表、数字编辑框、拨号键盘。他们的作用是:用户直接在拨号键盘上输入数字,然后数字编辑框显示所输入的原创 2014-10-13 14:24:59 · 10210 阅读 · 7 评论 -
Uicc之IccRecords(原)
与IccFileHandler类似,UiccCardApplication也会根据当前SIM卡的类型创建不同的IccRecords对象,这个对象与IccFileHandler的区别在于,IccFileHandler是以SIM文件系统为操作对象,而IccRecords是以SIM存储内容为操作对象(IccFileHandler偏重底层实现,IccRecords偏重上层应用)。 下面是原创 2014-08-05 19:22:40 · 6740 阅读 · 0 评论 -
Uicc之CatService(原)
CatService主要负责STK菜单的相关事宜,本节我们就来分析该对象。一、CatService的创建过程 在前面第二节中我们分析过,在UiccCard的更新过程中,会初始化CatService对象:原创 2014-08-06 19:32:49 · 5901 阅读 · 4 评论