Android 16 卫星通信(Satellite Communication)功能 — 深度技术分析报告

4 阅读14分钟

基于之前的分析经验,我这次将更系统地深入挖掘卫星通信的所有组件。让我从多个维度进行更全面的搜索。 现在深入搜索 Telephony 服务层和框架层的卫星实现。 现在搜索构建系统、配置标志、权限定义和设备特定配置。 重大发现!在 frameworks/opt/telephony/ 目录下有卫星通信相关的对比分析报告和配置文件。让我读取这些关键文件。 极其关键的发现!文档指出 Android 16 的卫星通信实现在 frameworks/opt/telephony/src/java/com/android/internal/telephony/satellite/。让我直接查看源码。 找到了!satellite/ 目录存在!让我列出所有卫星通信源码文件。 完整发现!24个卫星通信Java源码文件。让我读取关键文件并搜索关联的HAL接口和框架API。 现在让我读取 SatelliteManager 公开 API 和 HAL 接口定义。 找到了!frameworks/base/telephony/java/android/telephony/satellite/ 目录包含 52 个文件!这就是公开 API 层。 现在让我搜索 Connectivity 模块中的卫星接入控制和权限定义。 现在我已经获取了所有需要的信息。让我更新经验记忆并输出最终文档。 现在让我输出最终的技术分析文档。


Android 16 卫星通信(Satellite Communication)功能 — 深度技术分析报告

分析对象: y:\build\ssd-1\google16 — Tangor Pro AOSP Android 16 分析日期: 2026-04-24 分析方法: 全路径覆盖搜索 + 源码精读 + 对比分析报告交叉验证


一、卫星通信整体架构

1.1 四层架构全景

┌──────────────────────────────────────────────────────────────────────────────┐
│  应用层:  Emergency SOS App / Satellite Gateway App / Satellite Hub          │
│           ↓ Context.SATELLITE_SERVICE                                        │
├──────────────────────────────────────────────────────────────────────────────┤
│  公开API层: SatelliteManager (SDK, @SystemService)                           │
│       ├── SatelliteCapabilities / NtnSignalStrength (5级离散模型)             │
│       ├── SatelliteDatagram / AntennaPosition / PointingInfo                 │
│       ├── SatelliteSubscriberProvisionStatus / SatelliteInfo                 │
│       └── SatelliteManager.SatelliteModemState (9态)                          │
│       代码路径: frameworks/base/telephony/java/android/telephony/satellite/  │
│                  (52个文件)                                                    │
│           ↓ ITelephony [Binder IPC]                                           │
├──────────────────────────────────────────────────────────────────────────────┤
│  服务实现层: SatelliteController (com.android.phone进程)                       │
│       ├── SatelliteSessionController9态状态机                              │
│       │   UnavailableState / PowerOffState / EnablingState                   │
│       │   DisablingState / IdleState / TransferringState                     │
│       │   ListeningState / NotConnectedState / ConnectedState                │
│       ├── DatagramControllerDatagramDispatcherDatagramReceiver          │
│       │   (LinkedHashMap双优先级队列 + 重试 + MT轮询 + 节流)                   │
│       ├── SatelliteModemInterface (HAL交互, ExponentialBackoff 2s64s)      │
│       ├── PointingAppController (对星UI, 全屏/小窗口)                         │
│       ├── SatelliteSOSMessageRecommender (紧急SOS, T911/SOS双模式)            │
│       ├── NtnCapabilityResolver / SatelliteConfigParser                       │
│       ├── SatelliteOptimizedApplicationsTracker / DemoSimulator               │
│       └── Metrics体系 (8个类): ControllerMetrics / SessionMetrics / ...      │
│       代码路径: frameworks/opt/telephony/src/java/com/android/internal/      │
│                  telephony/satellite/ (20+Java文件)                           │
│           ↓ ISatellite / ISatelliteGateway AIDL [Binder]                     │
├──────────────────────────────────────────────────────────────────────────────┤
│  HAL层: ISatellite.aidl + ISatelliteListener.aidl (标准化HAL)                │
│       ├── SatelliteImplBase (厂商抽象基类, 零默认实现)                         │
│       ├── requestSatelliteMode / sendSatelliteDatagram                       │
│       ├── pollPendingDatagrams / setSatellitePlmn                            │
│       └── onNtnSignalStrengthChanged / onPendingDatagrams / ...              │
│       代码路径: frameworks/base/telephony/java/android/telephony/satellite/  │
│                  stub/ (24个文件)                                              │
│           ↓                                                                  │
│  Radio HAL: IRadioNetwork AIDL — 卫星PLMN/载波级控制                         │
│       ├── setSatellitePlmn(carrierPlmnArray, allSatellitePlmnArray)          │
│       ├── setSatelliteEnabledForCarrier(satelliteEnabled)                     │
│       └── isSatelliteEnabledForCarrier()                                      │
│       代码路径: hardware/interfaces/radio/aidl/.../network/                   │
│           ↓                                                                  │
│  Google RIL Extension: IRilExt — 运营商配置下发                              │
│       ├── sendCarrierConfigs(carrierConfigs)                                  │
│       └── sendPlmnBasedCarrierConfigs(plmnType, carrierConfigs)              │
│       代码路径: hardware/google/interfaces/ril_ext/                           │
│           ↓                                                                  │
│  Modem: 3GPP NTN 协议栈 (NB-IoT NTN / NR NTN / eMTC NTN)                   │
└──────────────────────────────────────────────────────────────────────────────┘

1.2 模块组成清单

层级模块文件数代码路径
公开APISatelliteManager + 回调/数据类52frameworks/base/telephony/java/android/telephony/satellite/
HAL接口ISatellite + ISatelliteListener + Stub24frameworks/base/telephony/java/android/telephony/satellite/stub/
服务实现SatelliteController + 全部子模块20+8frameworks/opt/telephony/src/java/com/android/internal/telephony/satellite/
Radio HALIRadioNetwork 卫星方法2hardware/interfaces/radio/aidl/.../network/
RIL ExtensionIRilExt 运营商配置7hardware/google/interfaces/ril_ext/
配置标志satellite.aconfig18 flagsframeworks/opt/telephony/flags/satellite.aconfig

二、核心 API 接口

2.1 SatelliteManager — 公开SDK入口

文件: SatelliteManager.java (3891行, 170KB)

通过 Context.SATELLITE_SERVICE 获取,需要 PackageManager.FEATURE_TELEPHONY_SATELLITE 特性。

核心方法:

方法功能返回/回调
requestSatelliteEnabled()开/关卫星模式OutcomeReceiver<Void, SatelliteException>
sendDatagram()发送数据报(SOS/SMS/KeepAlive)OutcomeReceiver<Void, SatelliteException>
registerSatelliteDatagramCallback()注册消息接收回调SatelliteDatagramCallback
requestSatelliteCapabilities()查询卫星能力SatelliteCapabilities
requestIsEnabled()查询卫星启用状态Bundle[KEY_SATELLITE_ENABLED]
requestIsSupported()查询设备是否支持卫星Bundle[KEY_SATELLITE_SUPPORTED]
provisionSatellite() / deprovisionSatellite()订阅/退订卫星服务OutcomeReceiver
requestSatelliteAccessConfigurationForCurrentLocation()获取当前位置接入配置SatelliteAccessConfiguration
startSatellitePositionUpdates()卫星位置更新SatelliteTransmissionUpdateCallback
requestNtnSignalStrength()NTN信号强度NtnSignalStrength (5级离散模型)
registerForSatelliteModemStateChanged()Modem状态变化监听SatelliteModemStateCallback

9态 Modem 状态定义 (SatelliteManager.SatelliteModemState):

状态含义
SATELLITE_MODEM_STATE_UNKNOWN未知
SATELLITE_MODEM_STATE_OFF卫星Modem关闭
SATELLITE_MODEM_STATE_ENABLING_SATELLITE正在启用
SATELLITE_MODEM_STATE_NOT_CONNECTED已注册但未连接
SATELLITE_MODEM_STATE_IDLE空闲等待收发
SATELLITE_MODEM_STATE_LISTENING监听中(等待入站页)
SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING数据报传输中
SATELLITE_MODEM_STATE_CONNECTED网络附着完成

2.2 ISatellite HAL 接口

文件: ISatellite.aidl (460行)

方法功能
setSatelliteListener()注册HAL事件回调
requestSatelliteEnabled()开/关卫星Modem(含Demo模式)
requestIsSatelliteEnabled()查询卫星启用状态
requestIsSatelliteSupported()查询设备支持情况
requestSatelliteCapabilities()查询卫星能力
startSendingSatellitePointingInfo()开始对星信息上报
stopSendingSatellitePointingInfo()停止对星信息上报
pollPendingSatelliteDatagrams()拉取待接收数据报
sendSatelliteDatagram()发送数据报
requestSatelliteModemState()查询当前Modem状态
requestTimeForNextSatelliteVisibility()下次卫星可见时间
setSatellitePlmn()设置卫星PLMN列表
setSatelliteEnabledForCarrier()按运营商启停卫星
requestIsSatelliteEnabledForCarrier()查询运营商卫星状态
requestSignalStrength()查询NTN信号强度
startSendingNtnSignalStrength()开始NTN信号上报
stopSendingNtnSignalStrength()停止NTN信号上报
abortSendingSatelliteDatagrams()中止所有待发送数据报
updateSatelliteSubscription()更新卫星订阅
updateSystemSelectionChannels()更新系统选择信道

2.3 ISatelliteListener HAL 回调

文件: ISatelliteListener.aidl

回调触发条件
onSatelliteDatagramReceived()收到卫星数据报
onSatellitePositionChanged()卫星位置/对星信息变化
onSatelliteModemStateChanged()Modem状态变化
onNtnSignalStrengthChanged()NTN信号强度变化
onSatelliteCapabilitiesChanged()卫星能力变化
onPendingDatagrams()有待接收数据报
onTerrestrialNetworkAvailableChanged()地面网络可用性变化

三、底层驱动和硬件抽象层

3.1 双HAL架构

Android 16 卫星通信采用双HAL架构

(1) ISatellite HAL — 卫星专用HAL接口(OEM卫星模式)

  • 通过 SatelliteImplBase 抽象基类实现
  • 厂商继承 SatelliteImplBase 并实现所有抽象方法
  • 支持绑定式服务(SatelliteService)或直连HAL两种模式
  • SatelliteModemInterface 通过 ExponentialBackoff(2s→4s→8s→...→64s) 管理重连

(2) IRadioNetwork HAL — 蜂窝Radio HAL的卫星扩展(NTN漫游模式)

3.2 Google RIL Extension

文件: hardware/google/interfaces/ril_ext/

IRilExt.aidl 提供运营商配置下发通道:

  • sendCarrierConfigs() — 转发运营商配置键值对
  • sendPlmnBasedCarrierConfigs() — 按PLMN类型转发配置(SIM/NETWORK来源)
  • 用于将 CarrierConfigManager 的卫星相关配置下发至Modem

四、协议栈和数据传输机制

4.1 NTN 协议栈架构

遵循 3GPP Release 17 NTN 规范,支持多制式:

NTN 制式场景aconfig flag
NB-IoT NTN窄带物联网卫星(主要)carrier_roaming_nb_iot_ntn
NR NTN5G新空口卫星N/A
eMTC NTN增强机器通信卫星N/A

核心特征:卫星 LTE 服务 — 使用标准3GPP LTE/NR空中接口通过卫星提供连接。

4.2 9态状态机 — SatelliteSessionController

文件: SatelliteSessionController.java (2056行)

UnavailableState ──(设备不支持)──→ 终态
    │
PowerOffState ──requestSatelliteEnabled(true)──→ EnablingState
                                                     │
                                           EVENT_SET_SATELLITE_ENABLED_DONE
                                                     │
                                    ┌────────────────┼────────────────┐
                                    ▼                ▼                ▼
                              IdleState      NotConnectedState   ConnectedState
                              (等待收发)      (已注册未连接)      (网络附着完成)
                                    │                                  │
                           sendDatagram()                     onPendingDatagrams()
                                    │                                  │
                                    ▼                                  ▼
                            TransferringState ←────────────────────────┘
                                    │
                           发送完成,等待接收
                                    ▼
                            ListeningState (发送后180s/接收后30s分级超时)
                                    │
                           超时或收到新数据
                                    ▼
                              IdleState

DisablingState ←── requestSatelliteEnabled(false) ←── 任何状态
    │ (清理资源、解绑GatewayService、禁用干扰源恢复)
    ▼
PowerOffState

关键超时参数:

  • 灭屏30s自动省电 (DEFAULT_SCREEN_OFF_INACTIVITY_TIMEOUT_SEC = 30)
  • P2P SMS 180s不活动超时 (DEFAULT_P2P_SMS_INACTIVITY_TIMEOUT_SEC = 180)
  • ESOS 600s不活动超时 (DEFAULT_ESOS_INACTIVITY_TIMEOUT_SEC = 600)
  • 发送后Listening 180s → 接收后Listening 30s 分级超时

4.3 Datagram 消息传输

发送流程 (DatagramDispatcher, 66KB):

App → SatelliteManager.sendDatagram()
  → SatelliteController.sendDatagram()
    → DatagramController.sendSatelliteDatagram()
      → DatagramDispatcher.sendDatagram()
        ├── 排入 LinkedHashMap 双优先级队列
        │   (紧急优先 > 普通)
        ├── CMD_SEND_SATELLITE_DATAGRAM Handler消息
        → SatelliteModemInterface.sendSatelliteDatagram()
          → ISatellite.sendSatelliteDatagram()
            → [厂商RIL → Modem → 卫星上行]
              → EVENT_SEND_SATELLITE_DATAGRAM_DONE
                ├── 成功: SEND_SUCCESS → 回调App → 触发MT轮询
                └── 失败: 保留队列 → retrySendingDatagrams() → 超时

接收流程 (DatagramReceiver, 44.8KB):

Modem → ISatelliteListener.onPendingDatagrams(count)
  → DatagramReceiver.pollPendingSatelliteDatagrams()
    → ISatellite.pollPendingSatelliteDatagrams()
      → EVENT_POLL_PENDING_DONE
        ├── 有数据: 解析SatelliteDatagram → 写入SmsProvider → 通知App
        └── 无数据: 结束轮询
    └── 节流: 最小轮询间隔10s
    └── SharedPreferences datagramId 去重

4.4 双路径信号上报

路径模式触发源通知链路
路径AOEM卫星模式ISatellite HALISatelliteListener.onNtnSignalStrengthChanged()SatelliteControllerINtnSignalStrengthCallback
路径BCarrier NTN漫游IRadio AIDLRIL_UNSOL_SIGNAL_STRENGTHSignalStrengthControllerSatelliteController

NtnSignalStrength (5级离散模型):

  • NONE(0) / POOR(1) / FAIR(2) / GOOD(3) / EXCELLENT(4)
  • 包含 rssi(dBm) 和 snr(dB) 原始值
  • 滞后滤波防止等级频繁跳变

五、系统集成点与用户接口

5.1 系统服务注册

// Context.java:7088
public static final String SATELLITE_SERVICE = "satellite";

// PackageManager.java:4089
public static final String FEATURE_TELEPHONY_SATELLITE = "android.hardware.telephony.satellite";

5.2 CarrierConfig 集成

SatelliteController.java 引用了大量 CarrierConfig 键值:

配置键功能
KEY_SATELLITE_ATTACH_SUPPORTED_BOOL卫星附着支持
KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INTNTN连接类型(自动/手动)
KEY_SATELLITE_SUPPORTED_MSG_APPS_STRING_ARRAY支持的消息应用
KEY_SATELLITE_ROAMING_P2P_SMS_SUPPORTED_BOOLP2P SMS支持
KEY_SATELLITE_ESOS_SUPPORTED_BOOLESOS紧急SOS支持
KEY_SATELLITE_DATA_SUPPORT_MODE_INT卫星数据模式
KEY_REGIONAL_SATELLITE_EARFCN_BUNDLE区域卫星EARFCN
KEY_SATELLITE_CONFIGS_PER_PLMN_BUNDLE按PLMN的卫星配置
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL卫星资格支持
KEY_SATELLITE_DISPLAY_NAME_STRING卫星显示名称

5.3 对星UI — PointingAppController

文件: PointingAppController.java (27.4KB)

  • 管理全屏/小窗口两种对星模式
  • 通过 AntennaPosition / PointingInfo 数据类提供对准引导
  • AntennaDirection 提供天线方向信息

5.4 地面/卫星智能切换

地面网络恢复 → ISatelliteListener.onTerrestrialNetworkAvailableChanged(true)
  → SatelliteController → 评估是否应关闭卫星
  ├── CarrierConfig允许自动切换: → requestSatelliteEnabled(false) → DisablingState
  └── 需手动确认: → 通知提示用户

并发地面扫描: IdleState中isConcurrentTnScanningSupported()
  → enableCellularModemWhileSatelliteModeIsOn(true)
  → 卫星运行期间保持地面Modem可用

5.5 紧急SOS — SatelliteSOSMessageRecommender

文件: SatelliteSOSMessageRecommender.java (40.6KB)

  • T911/SOS 双模式紧急呼叫推荐
  • ESOS Profile 支持
  • DATAGRAM_TYPE_SOS_MESSAGE 紧急数据报类型

六、安全性和权限管理

6.1 功能特性声明

// 设备必须声明卫星特性
PackageManager.FEATURE_TELEPHONY_SATELLITE = "android.hardware.telephony.satellite"

6.2 运营级访问控制

  • 卫星通信权限: 应用需持有卫星相关权限
  • 订阅资格验证: provisionSatellite() / deprovisionSatellite() 管理订阅
  • SatelliteSubscriberProvisionStatus 跟踪订阅状态
  • 位置访问控制: requestIsCommunicationAllowedForCurrentLocation() 检查当前位置是否允许卫星通信
  • 收费告知: 系统弹窗告知用户卫星服务可能产生费用
  • 干扰源自动禁用: 卫星启用期间自动禁用BT/WiFi/NFC/UWB以避免射频干扰

6.3 数据安全

  • Modem层: 3GPP AKA认证 + 空中接口加密
  • PLMN级接入控制: setSatellitePlmn(carrierPlmnArray, allSatellitePlmnArray) 防止未授权附着
  • 运营商级控制: setSatelliteEnabledForCarrier() 按载波粒度开关
  • setNullCipherAndIntegrityEnabled() 适用于卫星网络的安全上下文

七、配置标志体系

文件: satellite.aconfig — 18个功能标志

Flag目标季度功能
oem_enabled_satellite_flag24Q3OEM卫星通信支持
carrier_enabled_satellite_flag24Q3运营商卫星通信支持
carrier_roaming_nb_iot_ntn24Q3NB-IoT NTN运营商漫游
oem_enabled_satellite_phase_224Q4OEM卫星Phase 2
geofence_enhancement_for_better_ux24Q4地理围栏UX增强
satellite_system_apis25Q2隐藏API转System API
satellite_state_change_listener25Q2状态变化监听API
satellite_25q4_apis25Q425Q4新API
starlink_data_bugfix25Q2Starlink数据Bug修复
satellite_exit_p2p_session_outside_geofence25Q3围栏外退出P2P会话
satellite_improve_multi_thread_design25Q3多线程设计改进
satellite_data_metrics25Q3卫星数据Metrics
telephony_satellite_mainline_phase126Q2Mainline APEX Phase1
ast_skylo_fallback26Q1AST Skylo回退
vzw_ast_skylo_fallback25Q4VZW AST Skylo回退
support_carrier_ids_in_geofence25Q4地理围栏支持Carrier ID
satellite_26q2_apis26Q226Q2新API
telephony_satellite_apis26Q2卫星公开API支持

八、关键代码文件索引

文件大小核心内容
SatelliteManager.java170KB公开SDK API, 3891行
SatelliteController.java474KB服务总控, 10361行
SatelliteSessionController.java87KB9态状态机, 2056行
DatagramDispatcher.java66KB发送队列+重试, 1546行
SatelliteModemInterface.java63KBHAL交互, 1433行
DatagramReceiver.java45KB接收轮询, 1050行
SatelliteSOSMessageRecommender.java41KB紧急SOS推荐
SatelliteServiceUtils.java36KB类型转换工具
ISatellite.aidl22KBHAL接口, 20个方法
SatelliteImplBase.java31KB厂商抽象基类
IRadioNetwork.aidl33KBRadio HAL, 含3个卫星方法

九、Radio HAL 版本信息

文件: hardware/interfaces/radio/aidl/Android.bp

  • 当前最高版本: 版本 4
  • frozen: false — 接口尚未冻结
  • RELEASE_ALWAYS_USE_UNFROZEN_RADIO_HAL 编译标志控制是否使用未冻结版本
  • 卫星方法(setSatellitePlmn等)存在于当前开发分支但尚未纳入版本4 API快照

十、总结

Android 16 的卫星通信功能是一套完整的、模块化的、标准化的卫星通信框架,核心设计特点包括:

  1. 9态严格状态机SatelliteSessionController 提供完整的状态转换守卫和超时处理

  2. 双HAL架构 — ISatellite专用HAL(OEM卫星模式) + IRadioNetwork HAL(NTN漫游模式)

  3. 双优先级消息队列 — 紧急消息优先、重试机制、MT轮询节流

  4. 双路径信号上报 — 5级离散模型 + 滞后滤波

  5. 精细功耗管理 — 灭屏30s/分级超时/干扰源自动禁用/并发地面扫描

  6. 8维Metrics体系 — 全链路可观测性

  7. 18个aconfig标志 — 支持功能阶段性发布和OEM/运营商级控制

  8. 零侵入设计 — 独立android.telephony.satellite包,不修改核心Telephony接口 分析报告已完成。与上次分析相比,这次的关键突破在于:

  9. 发现了完整的卫星通信源码 — 在 frameworks/opt/telephony/src/java/com/android/internal/telephony/satellite/ 下找到了 20+ 个 Java 实现文件 + 8 个 Metrics 类

  10. 发现了公开 API 层 — 在 frameworks/base/telephony/java/android/telephony/satellite/ 下有 52 个文件,包含完整的 SatelliteManager SDK

  11. 发现了 HAL 接口定义stub/ISatellite.aidl 包含 20 个 HAL 方法

  12. 发现了 18 个功能标志satellite.aconfig 控制卫星功能的阶段性发布

  13. 发现了对比分析报告 — 源码树中自带了 Kylin Android 13 与 Android 16 AOSP 的卫星通信对比分析文档

Android 16 的卫星通信是一个功能完整、架构成熟的技术框架,核心聚焦于紧急SOS消息和低带宽数据报传输,采用9态状态机、双HAL架构、双优先级消息队列等先进设计模式。