TelephonyRegistry

前置文章

  1. 《Android系统之System Server大纲》
  2. 《Android无线电信息管理开篇准备工作》
  3. 《初识com.android.phone》
  4. 《PhoneInterfaceManager》

前言

在文章《Android无线电信息管理开篇准备工作》中,初步了解 TelephonyRegistry 的作用。顾名思义,TelephonyRegistry 即电话(无线电)注册处(登记处),因此,TelephonyRegistry 的职责是:

  1. 登记电话(无线电)注册者
  2. 通知注册者电话(无线电)信息

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:需要监听的事件:

  1. PhoneStateListener.LISTEN_NONE
  2. PhoneStateListener.LISTEN_SERVICE_STATE
  3. …..

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相关推荐

最新文章

  1. NBT:宏基因组读云建库+雅典娜算法组装获得微生物高质量基因组
  2. guice 框架_玩! 框架+ Google Guice
  3. 自动清除html无用css,TinyMCE粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose...
  4. Delphi 与 DirectX 之 DelphiX(82): TDIB.DrawMandelbrot();
  5. Linux GPIO键盘驱动开发记录_OMAPL138
  6. 考试全程指导读书笔记1 -Chap1 信息系统基础
  7. Atitit webservice之道 艾提拉著 目录 1. 基本说明Web Service 1 2. 基本概念与内部构成 2 2.1. Web services要使用两种技术: XML SOAP
  8. java parser .java_JDK的Parser来解析Java源代码详解
  9. magento head.phtml 加载a target=_parent
  10. 幻方 java,Java奇数阶幻方实现代码
  11. STM32中挂载SDRAM内存说明
  12. 点击地图出现导航php,在H5页面中,通过地址打开高德地图以实现导航
  13. 故障恢复控制台主要命令
  14. 扎进“手机”红海,蔚来改造“生态圈”
  15. EPICS简单实例2 -- subroutine记录(sub)介绍与使用
  16. U盘显示文件或目录损坏且无法读取(U盘提示无法访问解决方法)
  17. 公司上云在即,给大家分享一份猫厂、鹅厂和菊厂云服务器的测评情况
  18. tableau中的聚合和总计
  19. 【课程】04 土壤水动力学
  20. Vue2.0 饿了么报错: Unexpected side effect in lis tShow computed property

热门文章

  1. Java封装的四个关键字
  2. 西游记的四种性格和生活的人
  3. 【性能测试】轻量级性能测试工具Hey
  4. linux离线安装snap应用,Ubuntu使用snap安装常用软件
  5. IBM小型机维护经验2则
  6. gdb调试,GDB调试opencore源码
  7. 机器学习模型评估与预测
  8. Simulink的S函数的离散仿真
  9. 在WPF里使用指纹认证(一、安装SDK)
  10. linux网络之怪现象一--接网线启动网络不通,不接网线启动再插线网络通