应用启动器 Cluster(ApplicationLauncher)

Cluster ID: 0x050C  |  所在 Endpoint: 媒体端点(智能电视、机顶盒、流媒体设备等)

ApplicationLauncher 负责在媒体设备上启动、停止和隐藏内容应用 —— 是语音助手「打开 Netflix」「关闭当前应用」等指令的底层实现。 它管理的是应用的生命周期(启动/停止/隐藏),而不是应用内的内容播放。 通常部署在智能电视或机顶盒的媒体端点上,与 ApplicationBasic(应用信息查询)配合使用。

与 ApplicationBasic 的分工

ApplicationBasic(0x050D)负责只读的信息查询 —— 告诉 Controller「这个应用是什么、当前什么状态」。 ApplicationLauncher(0x050C)负责操作 —— 启动、停止、隐藏应用。 两者通常部署在同一个 Endpoint 上:先通过 ApplicationBasic 获取应用信息,再通过 ApplicationLauncher 控制应用生命周期。

命令(Commands)

ApplicationLauncher Cluster 有 3 个请求命令和 1 个响应命令。 LaunchApp 启动应用,StopApp 停止应用,HideApp 隐藏应用(退到后台),三者都返回 LauncherResponse 告知操作结果。 点击下方表格中的命令 ID 可跳转到对应的详细说明。

ID 名称 方向 说明 所需特性
0x00 LaunchApp 请求 启动指定应用 无
0x01 StopApp 请求 停止指定应用 无
0x02 HideApp 请求 隐藏指定应用(退到后台) 无
0x03 LauncherResponse 响应 操作结果(三个命令共用) 无

LaunchApp —— 启动应用(0x00)

启动设备上的指定应用。如果应用已在运行,则将其带到前台。 通过 ApplicationStruct 唯一标识目标应用, 可附带应用特定数据(如 DeepLink、启动参数)。

参数类型必选说明
Application ApplicationStruct 否 要启动的应用标识。省略时表示启动当前 Endpoint 上的应用
Data octstr 否 应用特定的附加数据(如 DeepLink、启动参数),由应用自行解析
// LaunchApp 命令示例
// 启动 CSA 目录中的 StreamCo Player 应用
{
  "Application": {
    "CatalogVendorID": 24742,
    "ApplicationID": "com.streamco.player"
  },
  "Data": "source=voice&deeplink=/home"
}
使用场景

用户对语音助手说「打开 Netflix」,助手查找到 Netflix 对应的 ApplicationStruct(CatalogVendorID + ApplicationID), 发送 LaunchApp 命令。电视启动 Netflix 并切换到前台显示。 如果附带 Data 参数(如 DeepLink),Netflix 可以直接跳转到指定页面。

StopApp —— 停止应用(0x01)

停止设备上的指定应用。应用的运行状态会变为 Stopped。 如果该应用正在播放内容,播放也会一并终止。

参数类型必选说明
Application ApplicationStruct 否 要停止的应用标识。省略时表示停止当前 Endpoint 上的应用
// StopApp 命令示例
// 停止当前运行的 StreamCo Player 应用
{
  "Application": {
    "CatalogVendorID": 24742,
    "ApplicationID": "com.streamco.player"
  }
}
使用场景

用户说「关闭 Netflix」,或自动化规则在晚上 11 点后自动停止所有正在运行的娱乐应用。 StopApp 会彻底终止应用进程,释放系统资源。与 HideApp 不同,被 Stop 的应用需要重新启动才能使用。

HideApp —— 隐藏应用(0x02)

将应用退到后台,但不终止其进程。应用状态变为 ActiveHidden, 仍然可以执行后台任务(如继续播放音乐)。

参数类型必选说明
Application ApplicationStruct 否 要隐藏的应用标识。省略时表示隐藏当前 Endpoint 上的应用
// HideApp 命令示例
// 隐藏应用(退到后台,不终止进程)
{
  "Application": {
    "CatalogVendorID": 24742,
    "ApplicationID": "com.streamco.player"
  }
}
使用场景

用户在看视频时收到来电,系统发送 HideApp 将视频应用退到后台,显示来电界面。 通话结束后再通过 LaunchApp 将视频应用切回前台,应用可以从中断处继续播放。 与 StopApp 的区别:HideApp 保留应用状态,适合临时切换;StopApp 彻底关闭,适合不再使用时释放资源。

LauncherResponse —— 操作结果(0x03)

LaunchApp、StopApp 和 HideApp 的统一响应。包含一个状态码和可选的附加数据。 控制端根据 Status 判断操作是否成功,失败时 Data 中可能包含错误详情。

字段类型说明
Status StatusEnum 操作结果状态码(见下方枚举)
Data octstr 可选的附加数据,成功时可能返回会话信息,失败时返回错误描述
// LauncherResponse 响应示例
// 启动成功
{
  "Status": 0,
  "Data": "session-id=xyz789"
}

// 应用不可用(未安装或不在目录中)
{
  "Status": 1,
  "Data": "Application not found in catalog"
}

// 等待用户确认(如首次启动需要同意条款)
{
  "Status": 3,
  "Data": "User approval required for first launch"
}

属性详解

ApplicationLauncher Cluster 共有 2 个属性。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 说明
0x0000 CatalogList list<uint16> 设备支持的应用目录厂商 ID 列表
0x0001 CurrentApp nullable ApplicationEPStruct 当前前台运行的应用

应用管理(0x0000, 0x0001)

描述设备支持的应用目录范围和当前前台应用的状态。

ID 名称 类型 说明
0x0000 CatalogList(目录列表) list<uint16> 设备支持的应用目录厂商 ID(CatalogVendorID)列表。 Controller 发送 LaunchApp 时,Application 参数中的 CatalogVendorID 必须在此列表中,否则设备无法识别该应用标识。 需要 AP 特性
0x0001 CurrentApp(当前应用) nullable ApplicationEPStruct 当前处于前台的应用信息,包括应用标识和所在 Endpoint。 当没有应用在前台时为 null。 需要 AP 特性
CurrentApp 与 ApplicationBasic.Status 的区别

CurrentApp 是从设备全局视角看「谁在前台」,而 ApplicationBasic 的 Status 属性是每个应用各自报告自己的运行状态。 一台电视上同时有多个应用的 Status 为 ActiveHidden(后台运行),但 CurrentApp 只指向一个前台应用(或 null)。

结构体定义

ApplicationLauncher Cluster 使用两个结构体来标识应用。

ApplicationEPStruct(应用端点结构体)

描述一个应用及其在设备上对应的 Endpoint。用于 CurrentApp 属性, 让 Controller 既能知道当前前台应用是什么,也能直接定位到它的 Endpoint 进行进一步交互。

字段 类型 必选 说明
Application ApplicationStruct 是 应用的唯一标识(目录厂商 ID + 应用 ID)
Endpoint endpoint-no 否 应用所在的 Endpoint 编号。有了这个编号,Controller 可以直接访问该 Endpoint 上的其他 Cluster(如 MediaPlayback、ContentLauncher)

ApplicationStruct(应用标识结构体)

通过目录体系唯一标识一个内容应用。这个结构体在 LaunchApp / StopApp / HideApp 命令和 CurrentApp 属性中都会用到, 也与 ApplicationBasic Cluster 的 Application(0x0004)属性共用同一结构。

字段 类型 说明
CatalogVendorID uint16 应用目录的厂商 ID,标识应用来源于哪个目录/平台。例如 CSA 官方目录的 ID 为 0x60AE(24750)
ApplicationID string 在目录内唯一标识应用的字符串,通常是反向域名风格。如 "com.netflix.app"、"com.youtube.tv"
CatalogVendorID 不是应用开发商

CatalogVendorID 是应用目录提供商的 VendorID,不是应用开发商的 VendorID。 可以理解为「这个应用在哪个应用商店上架的」。 同一个应用在不同目录中可能有不同的 ApplicationID,但 CatalogVendorID + ApplicationID 的组合在全局唯一。

枚举

StatusEnum

LauncherResponse 中的状态码,表示应用操作的结果。相比 ContentLauncher 的 StatusEnum,ApplicationLauncher 的状态码涵盖了应用安装和权限审批等场景。

0
Success 成功 —— 应用已启动/停止/隐藏
1
AppNotAvailable 应用不可用 —— 未安装、不在目录中或已下架
2
SystemBusy 系统繁忙 —— 设备资源不足,无法启动新应用
3
PendingUserApproval 等待用户确认 —— 首次启动需要用户同意条款或授权
4
Downloading 下载中 —— 应用正在下载,尚未安装完成
5
Installing 安装中 —— 应用已下载,正在安装过程中
非终态:Downloading 和 Installing

Downloading (4) 和 Installing (5) 是中间状态 —— 收到后不代表操作失败, 而是需要 Controller 等待一段时间后重试 LaunchApp,或订阅相关属性变化来获知安装完成的时机。 PendingUserApproval (3) 同理,需要用户在设备端完成确认后才能继续。

Feature 位图

ApplicationLauncher Cluster 通过 FeatureMap(0xFFFC)声明设备支持的能力:

Bit 0
AP(ApplicationPlatform) 应用平台 —— 设备是一个应用平台(如智能电视),支持多个可独立管理的内容应用。启用后提供 CatalogList 和 CurrentApp 属性
AP 特性的含义

不启用 AP 特性的设备是单应用设备 —— 设备本身就是一个应用,LaunchApp/StopApp/HideApp 操作的就是这个设备自身。 启用 AP 后,设备是一个应用平台(如智能电视、机顶盒),上面安装了多个独立应用, 每个应用有自己的 Endpoint 和 ApplicationBasic Cluster。 AP 特性启用后才有 CatalogList(设备支持哪些应用目录)和 CurrentApp(当前前台是哪个应用)两个属性。

示例数据

一台启用了 AP(ApplicationPlatform)特性的智能电视的 ApplicationLauncher Cluster 属性读取结果:

{
  // --- 支持的应用目录 ---
  "0x0000": [24742, 4996],           // CatalogList = 支持的目录厂商 ID 列表
                                      // 24742 = CSA 官方目录
                                      // 4996 = 某 OTT 平台目录

  // --- 当前前台应用 ---
  "0x0001": {                         // CurrentApp(当前应用,nullable)
    "Application": {                  //   ApplicationStruct
      "CatalogVendorID": 24742,       //     目录厂商 ID(CSA 官方)
      "ApplicationID": "com.streamco.player"  //  应用 ID
    },
    "Endpoint": 3                     //   应用所在 Endpoint 编号
  }
}
开发提示

发送 LaunchApp 前,应先读取 CatalogList (0x0000) 确认设备支持目标应用所在的目录。 如果 CatalogVendorID 不在列表中,LaunchApp 会返回 AppNotAvailable (1)。 发送后检查 CurrentApp (0x0001) 的变化来确认应用是否成功切换到前台。

常见场景

场景 1:语音助手「打开 XXX 应用」
  1. 用户对语音助手说「在电视上打开 Netflix」
  2. 检查设备 FeatureMap (0xFFFC),确认支持 AP 特性
  3. 读取 CatalogList (0x0000),确认设备支持 CSA 官方目录(24742)
  4. 遍历设备的各个 Endpoint,读取 ApplicationBasic 的 Application (0x0004) 属性,找到 Netflix 对应的 ApplicationStruct
  5. 发送 LaunchApp (0x00),传入 Netflix 的 ApplicationStruct
  6. 检查 LauncherResponse 的 Status:
    • 0(Success)—— Netflix 已启动
    • 1(AppNotAvailable)—— Netflix 未安装,提示用户
    • 3(PendingUserApproval)—— 首次启动需要在电视上确认
  7. 确认 CurrentApp (0x0001) 已更新为 Netflix
场景 2:自动化场景 —— 睡眠模式关闭所有应用
  1. 用户设置了「睡眠模式」自动化规则:每晚 11 点自动关闭电视上的所有应用
  2. 读取 CurrentApp (0x0001) 获取当前前台应用信息
  3. 如果 CurrentApp 不为 null,发送 StopApp (0x01) 停止该应用
  4. 遍历设备上所有应用 Endpoint,检查各自的 ApplicationBasic 的 Status 属性
  5. 对所有 Status 不为 Stopped(0)的应用,逐个发送 StopApp (0x01)
  6. 全部停止后,可配合 OnOff Cluster 将电视关闭或进入待机模式