IMS基本知识

IMS基本知识

  • 简介
  • ImsService
  • ImsManager
  • IMS 启动
  • IMS建立失败可能的原因

简介

IMS在CS通话的基础上增加了telephony/imsnet/imsvendor/ims和IMS相关的Media模块。
IMS基本知识_第1张图片

  • telephony/ims:主要包括了对外接口ImsPhone,通话管理中心ImsPhoneCallTracker,某一路通话ImsPhoneCall,某一路通话连接ImsPhoneConnection。需要实现的提供IMS相关服务的ImsService
  • net/ims:主要包括提供了IMS services API的ImsManager,以及ImsManager创建的负责处理 IMS语音和视频通话连接的ImsCall
  • vendor/ims:主要包括了ImsService的实现类,提供ims相关的服务。负责和modem和media打交道,这一模块由各个芯片厂商定制,所以各个芯片厂商的实现方式都不同。但都有一个实现 ImsService的类。

ImsService

实现了所有的ImsFeature(MmTelFeature和RcsFeature)和ims协议行为。通过ImsResolver绑定。由ImsServiceController来负责管理其生命周期及这个service所支持的ImsFeatures。其主要操作可以通过IImsServiceController来调用。

ImsManager

提供了与IMS services交互的API,如创建ims call。这个类是所有ims相关操作的起点。

IMS 启动

  1. IMS 的开关在 Settings 的网络设置模块中,点击启用 VoLTE 开关,即会通过 ImsManager 去进行打开IMS 功能的流程
  2. ImsManager 调用 TelephonyManager的接口,最终会经过 PhoneInterfaceManager 调用 ImsResolver 进入 IMS 框架流程
  3. ImsResolver 是上层的一个接入接口,在该流程中需要 ImsServiceController 进行跨进程的服务绑定,最终绑定 vendor 厂商提供的 ims.apk 中的 ImsService 作为服务,vendor 中的 ImsService 其实是继承于 framework 中的 ImsService
  4. 不同平台有不同的 ims.apk 实现,以高通为例,其内部以 ImsServiceStub 为最终实现子类,之后通过类似 RILJ 的 ImsSenderRxr 作为请求分发器,将请求下发到 RIL层中
  5. 底层响应通过 ImsRadioResponse 返回到 SenderRxr 中,紧接着一路返回到上层
  6. Android Q 中网络相关的设置已经从 TeleService 中移到了 Settings 下,TeleService中的代码并没有删除,Android 提供了两种网络设置样式,V1的配置值依然会进入 TeleService 网络设置

IMS建立失败可能的原因

  1. 需要查看 CarrierConfig 是否配置正确,同时检查是否有相关 overlay 配置导致 IMS 功能未正常启用
  2. 其次检查 ImsService 是否正确绑定

    Android 原生也提供了一个 CarrierServices.apk 包含 CarrierServicesImsService,如果未正确绑定到 vendor 厂商提供的 ims.apk 中的 ImsService,这时系统认为 IMS 服务不可用,也很可能发生连接建立失败的问题

你可能感兴趣的:(Android,ims,android,aosp,volte,java)