TelephonyTesgistry

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 只是做了一个中转站的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值