TelephonyTesgistry
TelephonyRegistry
前置文章
- 《Android系统之System Server大纲》
- 《Android无线电信息管理开篇准备工作》
- 《初识com.android.phone》
- 《PhoneInterfaceManager》
前言
在文章《Android无线电信息管理开篇准备工作》中,初步了解 TelephonyRegistry 的作用。顾名思义,TelephonyRegistry 即电话(无线电)注册处(登记处),因此,TelephonyRegistry 的职责是:
- 登记电话(无线电)注册者
- 通知注册者电话(无线电)信息
TelephonyManager&SubscriptionManager
电话相关使用 TelephonyManager
SIM相关使用 SubscriptionManager
在 《Android系统之System Server大纲》一文中,学会了 Android System Server 的架构方式,TelephonyRegistry 作为 server 端,TelephonyManager&SubscriptionManager 则作为 client 端。
在《Android System Server大纲之VibratorService》一文中,清楚的了解到 client 的获取过程以及 getSystemService 返回的本质对象。TelephonyManager 的获取方式是:
TelephoneManager tm = Context.getSystemService(Context.TELEPHONY_SERVICE);
SubscriptionManager sm = Context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
TelephonyRegistry创建启动
在文章《Android系统之System Server大纲》中,学习了 Android 系统的 System Server 中的 System Service 是如何创建、启动和管理的。
TelephonyRegistry 的启动过程是:
TelephonyRegistry创建代码是:
traceBeginAndSlog("StartTelephonyRegistry");
telephonyRegistry = new TelephonyRegistry(context);
ServiceManager.addService("telephony.registry", telephonyRegistry);
traceEnd();
代码位于文件 frameworks/base/services/java/com/android/server/SystemServer.java 中。
TelephonyRegistry方法集
注意:下面的时序图只针对 2G/3G 网络,暂时不包含 IMS/SIP 的网络
注册接口
//注册用户(SIM)信息变化监听器
params2:回调接口IOnSubscriptionsChangedListener
addOnSubscriptionsChangedListener(String callingPackage,IOnSubscriptionsChangedListener callback):void
//注册无线电业务信息变化监听器
params3:需要监听的事件:
- PhoneStateListener.LISTEN_NONE
- PhoneStateListener.LISTEN_SERVICE_STATE
- …..
listen(pkgForDebug, IPhoneStateListener callback, int events,boolean notifyNow):void
通知变化
//通知呼叫转移变化
notifyCallForwardingChanged(boolean cfi):void
//通知通话状态变化
params1:状态
params2:电话号码
notifyCallState(int state, String incomingNumber):void
//通知通话状态变化
notifyCallStateForPhoneId(int phoneId, int subId, int state,String incomingNumber) {
//通知网络类型变化
notifyCarrierNetworkChange(boolean active)
//通知所有基站(网络)信息
notifyCellInfo(List cellInfo)
//通知所有基站(网络)信息
notifyCellInfoForSubscriber(int subId, List cellInfo)
//通知基站定位信息
notifyCellLocation(Bundle cellLocation)
//通知基站定位信息
notifyCellLocationForSubscriber(int subId, Bundle cellLocation)
//通知数据连接状态
notifyDataActivity(int state)
//通知数据连接状态
notifyDataActivityForSubscriber(int subId, int state)
//通知数据连接已连接
notifyDataConnection(int state, …, int networkType, boolean roaming)
//通知数据连接已连接
notifyDataConnectionForSubscriber(…)
//同时数据连接连接失败
notifyDataConnectionFailed(String reason, String apnType)
//通知通话断开连接(通话结束)
notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause)
//语音信箱通知
notifyMessageWaitingChangedForPhoneId(int phoneId, int subId, boolean mwi)
//通知 OEM hook raw event
notifyOemHookRawEventForSubscriber(int subId, byte[] rawData)
//通知空中业务变化(STK)
notifyOtaspChanged(int otaspMode)
//通知无线电状态变化
notifyServiceStateForPhoneId(int phoneId, int subId, ServiceState state)
//通知无线电信号强度
notifySignalStrengthForPhoneId(int phoneId, int subId,SignalStrength signalStrength)
//通知SIM卡信息变化
notifySubscriptionInfoChanged()
//通知VoLTE(4G通话)网络状态变化
notifyVoLteServiceStateChanged(VoLteServiceState lteState)
//反注册用户(SIM)信息变化监听器
removeOnSubscriptionsChangedListener(String pkgForDebug,IOnSubscriptionsChangedListener callback)
方法集UML模型
addOnSubscriptionsChangedListener
listen
notifyCallForwardingChanged
notifyCallState
notifyCallStateForPhoneId
notifyCarrierNetworkChange
无
notifyCellInfo(ForSubscriber)
notifyCellLocation
notifyDataActivity
notifyDataConnection
notifyDataConnectionFailed
类同notifyDataConnection
notifyDisconnectCause
notifyMessageWaitingChangedForPhoneId
无
notifyOemHookRawEventForSubscriber
无
notifyOtaspChanged
notifyServiceStateForPhoneId
notifySignalStrengthForPhoneId
类同notifyServiceStateForPhoneId
notifySubscriptionInfoChanged
notifyVoLteServiceStateChanged
无
反注册的问题
通过注册接口listen(pkgForDebug, IPhoneStateListener callback, int events,boolean notifyNow):void,注册无线电业务信息变化监听器时,却没有反注册的接口,那如果不想监听了,怎么办?同样是调用调用注册的接口,但是第三个参数必须传入 PhoneStateListener.LISTEN_NONE 就可以实现反注册。当然,你可以粗暴的把 callback = null 也可以的。
总结
本文深入了解了 TelephonyRegistry 是如果实现无线电和SIM卡信息监听器的登记工作,如何传递无线电和SIM卡信息变化。总体观览 TelephonyRegistry 的所有通知接口,基本上,变化来源是 Phone,因此,TelephonyRegistry 只是做了一个中转站的作用。
TelephonyTesgistry相关推荐
最新文章
- NBT:宏基因组读云建库+雅典娜算法组装获得微生物高质量基因组
- guice 框架_玩! 框架+ Google Guice
- 自动清除html无用css,TinyMCE粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose...
- Delphi 与 DirectX 之 DelphiX(82): TDIB.DrawMandelbrot();
- Linux GPIO键盘驱动开发记录_OMAPL138
- 考试全程指导读书笔记1 -Chap1 信息系统基础
- Atitit webservice之道 艾提拉著 目录 1. 基本说明Web Service	1 2. 基本概念与内部构成	2 2.1. Web services要使用两种技术: XML SOAP
- java parser .java_JDK的Parser来解析Java源代码详解
- magento head.phtml 加载a target=_parent
- 幻方 java,Java奇数阶幻方实现代码
- STM32中挂载SDRAM内存说明
- 点击地图出现导航php,在H5页面中,通过地址打开高德地图以实现导航
- 故障恢复控制台主要命令
- 扎进“手机”红海,蔚来改造“生态圈”
- EPICS简单实例2 -- subroutine记录(sub)介绍与使用
- U盘显示文件或目录损坏且无法读取(U盘提示无法访问解决方法)
- 公司上云在即,给大家分享一份猫厂、鹅厂和菊厂云服务器的测评情况
- tableau中的聚合和总计
- 【课程】04 土壤水动力学
- Vue2.0 饿了么报错: Unexpected side effect in lis tShow computed property