Android Telephony框架

目录

  • 一、简介
  • 二、应用层(Application)
  • 三、框架层(Framework)
  • 四、本地 RIL 层(RIL)
  • 五、驱动层(Modem)
  • 六、整体框架


一、简介

无论手机发展到如何智能的程度,最关键和重要的功能仍然是通讯,具体来说就是打电话、发短信、上网功能的使用。而整个 Android 通讯的框架从下往上可以分为 4 个层次:

  • 1、 Modem ----这是整个通讯的硬件基础,需要 Modem 芯片,不同制式需要采用不同
    的 Modem;
  • 2、 RIL ----为了适配不同的 Modem 芯片而抽象出来的中间层,用于将 Modem 指令
    转换为 Java 可用的数据流;
  • 3、 Framework 中的 Telephony ----这是在 Framework 层搭建的通讯框架,面向开发
    者提供操作通讯事务的能力;
  • 4、 Application ----这是最上层的应用,直接面向用户,提供拨号、上网、发短信的界面;

二、应用层(Application)

面向用户的应用层,依赖于应用框架层,通过访问 Telephony 应用框架层的业务模块来呈现给用户具体的功能,主要包括 Phone、 Contacts、 SMS 等应用,Phone 比较特殊,系统启动时就被运行起来了,且 Phone 启动时会创建 Telephony 框架层,并与之运行在同一个进程中。

三、框架层(Framework)

Telephony 应用框架层主要包括 RILJ、 Service、业务功能模块三个部分构成,提供了电话,短信,联系人等所需的所有功能
代码路径是: /frameworks/base/telephony
android.telephony:外部应用可访问的 Phone 模块
com.android.internal.telephony: Phone 应用和框架内部使用的 Phone 模块

  • 1.RILJ
    /frameworks/opt/telephony/src/java/com/android/internal/telephony/RIL.java
    RIL.java 是 Telephony 和本地 RIL 的通信接口,通过 Socket(rild)完成电话服务命令的收
  • 2.Service
    Telephony 基于 IBinder 提供了各种功能的 Service,以便于业务功能模块的实现
  • 3.业务功能模块
    Telephony 业务功能模块主要包括语音、短信、 ICC 卡、网络服务以及数据连接等,这些功能模块是 Android 系统通话功能的核心和基础注:整个 Framework 层的 Telephony框架运行在一个叫做 Phone(com.android.phone)的进程中。而这个进程是在
    packages\services\Telephony 模块中被创建的

四、本地 RIL 层(RIL)

RIL(Radio Interface Layer)是 Telephony 框架层与 Modem 之间的接口层(属于 HAL 层),RIL 将 Modem 提供的各种服务进行了抽象,以提供给 Framework 层统一的接口
RIL 架构

  • 1.RIL 抽象层
    实现 RIL 层框架,包括 RILD 守护进程和 RIL 库,定义了其与 Framework 层、 Vendor RIL 之间的接口
  • 2.RIL 实现层
    基于不同 Modem 厂商的 RIL 功能实现(Vendor RIL),其主要功能是接受 RIL 层的主动Request,转发给 Modem,同时接受 Modem 返回的请求 Response 和主动上报事件,上报给 RIL 层

RILJ(Radio Interface Layer Java):

RILJ是Android系统中的一个Java库,用于处理与手机基带(Modem)通信的高层接口。它提供了一组Java接口,用于向基带发送命令、接收响应,并处理与手机网络通信相关的功能。RILJ通常运行在Android系统的应用层,与应用程序和系统服务进行交互,将高层的通信请求转换成与基带通信的底层命令。

RILD(Radio Interface Layer Daemon):

RILD是Android系统中的一个守护进程(Daemon),用于与手机基带进行底层通信。它负责管理与基带的通信通道,接收来自RILJ的请求并将其转发给基带,同时将基带的响应返回给RILJ。RILD通常运行在Android系统的底层,与基带硬件进行直接通信,实现手机网络功能的底层支持。

RILD 是一个可执行程序,作为守护进程运行在系统中,进程内配合 RIL Lib 和 Vendor RIL 实现了 RIL 的所有功能,它通过 Socket 与应用框架层进行通信,守护进程内部会初始化 VendorRIL,同时管理所有的电话相关的请求、主动上报、请求 Response 等事件,其主要功能如下:

  • 1.Event 处理框架(通过 Select 机制实现)
  • 2.请求、数据下发 (将 RILJ 通过 Socket 传过来的数据解成 C 语言数据结构,然后和请求下发给 Vendor RIL 处理)
  • 3.Response、数据上报(将 Vendor RIL 上报的请求 Response 和主动上报事件打包通过Socket 转发给 RILJ 层)注: RIL 和 Modem 之间交互,大部分厂商采用 AT 命令交互,也有其他的交互方式,例如高通使用了 ONCRPC、 QMI 接口

五、驱动层(Modem)

  RIL 驱动用于实现电话功能,主要硬件是通信模块(Modem),Modem 通过与通信网络进行沟通,传输语音及数据,完成呼叫、短信等相关电话功能。
  目前的智能机在硬件上多采用双 cpu 的架构,一个是基带处理器,主要处理数字信号、语音信号的编码解码以及通信 3 协议,基带处理器、射频和其它外围芯片作为一个 Modem 模块,提供 AT 命令接口。
  另一个是应用处理器,运行操作系统和各种应用程序。对于目前大部分的独立通信模块而言,无论是 2G 还是 3G 都已经非常成熟,模块化相当完善,硬件接口非常简单,也有着相对统一的软件接口。
  一般 Modem 模块装上 SIM 卡,直接上电即可工作,自动完成初始的找网、网络注册等工作,完成之后即可打电话、发短信等。

六、整体框架

在这里插入图片描述

参考链接:
Android telephony整体结构
初识telephony

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/586835.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型之路2:继续趟一条小路

继续趟一条小路,可谓是充满了曲折,当然,必不可少的还是坑。 吐槽 看过的喷友,其实你看完以后,大概率也就是和我一起骂骂街,因为....我也的确没理清楚。 我也不知道做错了什么,就是运行不过去…

1.JavaEE进阶篇 - 为什么要学习SpringBoot呢?

文章目录 1.为什么要学框架?2.框架的优点展示(SpringBoot VS Servlet)2.1 Servlet 项⽬开发2.1.1 创建项⽬2.1.2 添加引⽤2.1.3 添加业务代码2.1.4 运⾏项⽬(配置tomcat)2.1.5 Maven配置2.1.5.1修改本地Maven仓库地址2.1.5.2 配置settings.xml文件2.1.5.3项目 本地仓…

python file怎么打开

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方…

税务知识竞赛活动方案

为了提高税务工作人员的业务技能和知识,现在全市范围开展税务知识竞赛,希望通过“以赛促学”,在税务系统掀起一场税务知识学习热潮。下面是本次竞赛的活动方案。 1、第一轮:争分夺秒。选择题或判断题,每位参赛选手按编…

windows部署Jenkins并远程部署tomcat

目录 1、Jenkins官网下载Jenkins 2、安装Jenkins 3、修改Home directory 4、插件安装及系统配置 5、Tomcat安装及配置 5.1、修改配置文件,屏蔽以下代码 5.2、新增登录用户 5.3、编码格式修改 5.4、启动tomcat 6、Jenkins远程部署war包 6.1、General配置 6.2、Sourc…

如何用 C++ 部署深度学习模型?

深度学习模型在诸多领域如图像识别、自然语言处理、语音识别等展现出强大的应用潜力。然而,模型训练与实际部署是两个不同的环节,许多开发者在使用Python进行模型训练后,出于性能、集成便利性或特定平台要求等因素,会选择使用C进行…

数字未来:探索 Web3 的革命性潜力

在当今数字化的时代,Web3作为互联网的新兴范式正逐渐崭露头角,引发了广泛的关注和探讨。本文将深入探索数字未来中Web3所蕴含的革命性潜力,探讨其对社会、经济和技术的深远影响。 1. Web3:数字世界的下一个阶段 Web3是一个正在崛…

在java开发中平方怎么表示?平方表示的方法有哪几种?

在java开发中平方怎么表示?平方表示的方法有哪几种? 在我们计算一个数的几次方的时候。我们按照课堂中老师的教法就是在一个数的右上角写上一个小小的数字用来表示一个数的几次方,那么大家知道“在java开发中平方怎么表示吗?“和…

Redis 和 Mysql 数据库数据如何保持一致性

1. 前言 我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力,但是当更新数据库时,如何保证缓存及数据库一致性,一般我们采用延时双删策略。 目前系统中常用的做法是一个查询接口,先查询Redis,如果不存在则查询…

【笔记】即时通讯设计

记录一下最近对im功能的设计 写扩散 1)遍历群聊的成员并发送消息;2)群聊所有人都存一份;3)查询每个成员的在线状态;4)在线的实时推送。 读扩散 1)遍历群聊的成员并发送消息&#x…

Typescript体操类型学习1

文章目录 TS 类型体操练习Tuple to UnionTuple to ObjectFirst of ArrayLast of ArrayPopLength of Tuple TS 类型体操练习 Tuple to Union Implement a generic TupleToUnion<T> which covers the values of a tuple to its values union. TupleToUnion 的目标是将元…