Flutter三方库适配OpenHarmony【apple_product_name】荣耀Magic系列设备映射表
本文介绍了荣耀Magic系列及数字系列设备的映射表结构,涵盖Magic6、Magic5、Honor 200和Honor 100四个系列共17个型号标识符。重点分析了PGT代号在Magic6 Pro和Magic5标准版间的跨代复用问题,以及荣耀设备以"Honor"开头的命名规则。文章详细展示了各系列的型号映射表,并提供了Dart代码示例说明如何查询设备名称。同时指出了荣耀与华为设
前言
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

荣耀 Magic 系列是荣耀品牌的旗舰产品线,代表了荣耀在 AI 智能、影像系统和护眼技术等领域的最高技术水平。本文将结合 apple_product_name 库的实际源码,详细介绍荣耀 Magic 系列及数字系列设备的映射表结构、查询方法和实战应用,帮助开发者在 OpenHarmony 跨平台应用中精准识别荣耀品牌设备。
先给出结论式摘要:
- 荣耀设备共 17 个型号标识符:覆盖 Magic6(4个)、Magic5(4个)、Honor 200(5个)、Honor 100(4个)四个系列
- PGT 代号跨代复用:PGT-AN00/AN10 对应 Magic6 Pro,PGT-N19/N29 对应 Magic5,必须完整匹配
- Honor 前缀区分品牌:荣耀设备产品名称以 “Honor” 开头,华为设备以 “HUAWEI” 开头,品牌识别清晰
提示:本文所有映射数据来源于 apple_product_name 库的
HUAWEI_DEVICE_MAP,建议对照源码阅读。
目录
- Magic6 系列映射表
- Magic5 系列映射表
- Honor 200 系列映射表
- Honor 100 系列映射表
- 插件如何查找荣耀设备名称
- Flutter 端调用荣耀设备查询
- 通过 lookup 方法查询指定荣耀型号
- PGT 代号跨代复用问题
- 型号命名规则详解
- 荣耀与华为品牌区分
- 判断设备所属系列
- 完整荣耀设备映射汇总
- Magic 系列能力检测
- AI 功能差异化适配
- 荣耀设备统计分析
- MagicOS 生态适配
- 映射表维护与新设备更新
- 常见问题与排查
- 总结
一、Magic6 系列映射表
1.1 Magic6 系列概览
Magic6 系列是荣耀 2024 年发布的最新一代旗舰产品,在 AI 智能、影像系统和续航能力方面实现了全面升级。
| 产品名称 | 产品代号 | 型号数量 | 定位 |
|---|---|---|---|
| Honor Magic6 Pro | PGT | 2 | 旗舰影像 |
| Honor Magic6 | BVL | 2 | 标准旗舰 |
1.2 完整型号映射
// Magic6 系列 — 2024年发布
"PGT-AN00": "Honor Magic6 Pro",
"PGT-AN10": "Honor Magic6 Pro",
"BVL-AN00": "Honor Magic6",
"BVL-AN10": "Honor Magic6",
Magic6 系列的产品代号分布在 PGT(Pro 版)和 BVL(标准版)两个前缀上。AN00 和 AN10 分别代表同一产品的不同配置变体,可能在存储容量或颜色选择上有所区别。
1.3 Dart 侧验证
final ohos = OhosProductName();
// 查询 Magic6 Pro
final magic6pro = await ohos.lookup('PGT-AN00');
print(magic6pro); // Honor Magic6 Pro
// 查询 Magic6 标准版
final magic6 = await ohos.lookup('BVL-AN00');
print(magic6); // Honor Magic6
提示:PGT 代号同时被 Magic6 Pro 和 Magic5 使用,这是荣耀映射表中最需要注意的跨代复用问题。详见第八章。
二、Magic5 系列映射表
2.1 Magic5 系列概览
Magic5 系列是荣耀 2023 年发布的旗舰产品,在影像技术和 AI 能力方面达到了行业领先水平。
| 产品名称 | 产品代号 | 型号数量 | 特点 |
|---|---|---|---|
| Honor Magic5 Pro | FRI | 2 | 专业影像 |
| Honor Magic5 | PGT | 2 | 与 Magic6 Pro 共用代号 |
2.2 完整型号映射
// Magic5 系列 — 2023年发布
"FRI-AN00": "Honor Magic5 Pro",
"FRI-AN10": "Honor Magic5 Pro",
"PGT-N19": "Honor Magic5",
"PGT-N29": "Honor Magic5",
2.3 Magic5 与 Magic6 的编码对比
| 对比维度 | Magic5 系列 | Magic6 系列 |
|---|---|---|
| Pro 版代号 | FRI | PGT |
| 标准版代号 | PGT(复用) | BVL |
| 后缀格式 | AN/N | AN |
| 总型号数 | 4 | 4 |
Magic5 标准版使用了 PGT 作为产品代号前缀,这与 Magic6 Pro 的代号完全相同,但通过不同的版本号后缀(N19/N29 vs AN00/AN10)来区分。
注意:Magic5 系列虽然已经不是最新一代产品,但在市场上仍有大量活跃用户,开发者在进行设备适配时不应忽视这一代产品。
三、Honor 200 系列映射表
3.1 Honor 200 系列概览
Honor 200 系列是荣耀 2024 年发布的中高端产品,在 Magic 旗舰系列和入门级 X 系列之间起到承上启下的作用。
| 产品名称 | 产品代号 | 型号数量 | 定位 |
|---|---|---|---|
| Honor 200 Pro | RMO | 2 | 中高端影像 |
| Honor 200 | ALI | 2 | 中高端标准 |
| Honor 200 Lite | LLY | 1 | 轻量版 |
3.2 完整型号映射
// Honor 200 系列 — 2024年发布
"RMO-AN00": "Honor 200 Pro",
"RMO-NX9": "Honor 200 Pro",
"ALI-AN00": "Honor 200",
"ALI-NX9": "Honor 200",
"LLY-NX1": "Honor 200 Lite",
Honor 200 系列引入了 NX9 后缀作为国际版标识,这与华为设备的 LX9 后缀不同。Honor 200 Lite 使用了独特的 NX1 后缀,且仅有 1 个型号标识符。
提示:荣耀数字系列的国际版后缀为 NX(如 NX9、NX1),而华为设备的国际版后缀为 LX(如 LX9)。这是两个品牌在编码体系上的一个显著差异。
四、Honor 100 系列映射表
4.1 Honor 100 系列概览
Honor 100 系列是荣耀 2023 年发布的中高端产品,同样搭载了 MagicOS 操作系统和荣耀的核心 AI 功能。
| 产品名称 | 产品代号 | 型号数量 | 定位 |
|---|---|---|---|
| Honor 100 Pro | CMA | 2 | 中高端影像 |
| Honor 100 | GIA | 2 | 中高端标准 |
4.2 完整型号映射
// Honor 100 系列 — 2023年发布
"CMA-AN00": "Honor 100 Pro",
"CMA-NX9": "Honor 100 Pro",
"GIA-AN00": "Honor 100",
"GIA-NX9": "Honor 100",
4.3 数字系列编码对比
| 对比维度 | Honor 100 | Honor 200 |
|---|---|---|
| Pro 版代号 | CMA | RMO |
| 标准版代号 | GIA | ALI |
| Lite 版 | 无 | LLY |
| 国际版后缀 | NX9 | NX9 / NX1 |
| 总型号数 | 4 | 5 |
两代数字系列的编码模式保持了一致性,Pro 版和标准版各有独立的产品代号,国际版统一使用 NX9 后缀。
注意:Honor 100 系列没有 Lite 版本,而 Honor 200 系列新增了 Lite 版本(LLY-NX1),这反映了荣耀在中端市场的产品线扩展策略。
五、插件如何查找荣耀设备名称
5.1 原生层查找逻辑
荣耀设备与华为设备共享同一个 HUAWEI_DEVICE_MAP 映射表,查找逻辑完全一致:
private getProductName(result: MethodResult): void {
try {
const model = deviceInfo.productModel;
// 先从映射表查找
let productName = HUAWEI_DEVICE_MAP[model];
// 如果映射表没有,使用系统的 marketName
if (!productName) {
productName = deviceInfo.marketName || model;
}
result.success(productName);
} catch (e) {
const errorMsg = e instanceof Error ? e.message : String(e);
result.error("GET_PRODUCT_NAME_ERROR", errorMsg, null);
}
}
5.2 荣耀设备的查找特点
与华为设备相比,荣耀设备在映射表中有一个显著特点——产品名称以 “Honor” 而非 “HUAWEI” 开头,这为品牌识别提供了直接的依据。
查找流程:
- 通过
deviceInfo.productModel获取型号标识符(如"PGT-AN00") - 在
HUAWEI_DEVICE_MAP中查找,得到"Honor Magic6 Pro" - 产品名称中的
"Honor"前缀可直接用于品牌判断
提示:虽然映射表名为
HUAWEI_DEVICE_MAP,但它同时包含了华为和荣耀两个品牌的设备数据。这是因为两个品牌的设备都运行在 OpenHarmony/HarmonyOS 生态中。
5.3 查找流程图解
Flutter 调用 getProductName()
│
▼
获取 deviceInfo.productModel
│ (例如: "PGT-AN00")
▼
查询 HUAWEI_DEVICE_MAP[model]
│
┌───┴───┐
│ 命中 │ 未命中
▼ ▼
返回映射名称 读取 marketName
"Honor │
Magic6 Pro" │
┌───┴───┐
│ 有值 │ 无值
▼ ▼
返回 返回 productModel
marketName "PGT-AN00"
六、Flutter 端调用荣耀设备查询
6.1 OhosProductName 类核心方法
在 Dart 层,OhosProductName 类通过 MethodChannel 与原生插件通信:
class OhosProductName {
static const MethodChannel _channel = MethodChannel('apple_product_name');
static final _instance = OhosProductName._();
OhosProductName._();
factory OhosProductName() => _instance;
/// 获取设备产品名称
/// 例如: "Honor Magic6 Pro"
Future<String> getProductName() async {
final String? productName = await _channel.invokeMethod('getProductName');
return productName ?? 'Unknown';
}
/// 获取设备型号标识符
/// 例如: "PGT-AN00"
Future<String> getMachineId() async {
final String? machineId = await _channel.invokeMethod('getMachineId');
return machineId ?? 'Unknown';
}
}
6.2 关键设计要点
OhosProductName 采用单例模式,核心特点:
- 调用
getProductName()返回如"Honor Magic6 Pro"的友好名称 - 调用
getMachineId()返回如"PGT-AN00"的原始型号标识符 - 通信失败时兜底返回
'Unknown',保证调用方始终拿到非空结果
注意:MethodChannel 的通信是异步的,所有方法都返回
Future。在 UI 层使用时建议配合FutureBuilder或在initState中预加载。详见 Flutter Platform channels 官方文档。
七、通过 lookup 方法查询指定荣耀型号
7.1 Dart 侧 lookup 方法
库提供了 lookup 方法用于查询任意型号标识符:
/// 根据型号标识符查找产品名称
Future<String> lookup(String machineId) async {
final String? productName = await _channel.invokeMethod('lookup', {
'machineId': machineId,
});
return productName ?? machineId;
}
7.2 原生层 lookup 实现
private lookup(call: MethodCall, result: MethodResult): void {
try {
const machineId = call.argument("machineId") as string;
if (!machineId) {
result.error("INVALID_ARGUMENT", "machineId is required", null);
return;
}
const productName = HUAWEI_DEVICE_MAP[machineId];
result.success(productName);
} catch (e) {
const errorMsg = e instanceof Error ? e.message : String(e);
result.error("LOOKUP_ERROR", errorMsg, null);
}
}
7.3 荣耀设备 lookup 示例
final ohos = OhosProductName();
// 查询 Magic 系列
final magic6pro = await ohos.lookup('PGT-AN00');
final magic5pro = await ohos.lookup('FRI-AN00');
// 查询数字系列
final honor200pro = await ohos.lookup('RMO-AN00');
final honor100 = await ohos.lookup('GIA-AN00');
print('PGT-AN00 → $magic6pro'); // Honor Magic6 Pro
print('FRI-AN00 → $magic5pro'); // Honor Magic5 Pro
print('RMO-AN00 → $honor200pro'); // Honor 200 Pro
print('GIA-AN00 → $honor100'); // Honor 100
lookup 方法直接在 HUAWEI_DEVICE_MAP 中做键值查找,时间复杂度为 O(1)。
提示:
lookup方法对华为和荣耀设备的处理逻辑完全一致,映射表不区分品牌。详见 apple_product_name API 文档。
八、PGT 代号跨代复用问题
8.1 问题描述
PGT 是荣耀映射表中最特殊的产品代号——它同时被 Magic6 Pro 和 Magic5 两代不同产品使用:
// PGT 代号的所有型号
"PGT-AN00": "Honor Magic6 Pro", // Magic6 Pro
"PGT-AN10": "Honor Magic6 Pro", // Magic6 Pro
"PGT-N19": "Honor Magic5", // Magic5 标准版
"PGT-N29": "Honor Magic5", // Magic5 标准版
8.2 区分规则
区分这两款产品的关键在于后缀格式:
| 后缀 | 产品 | 代际 |
|---|---|---|
| AN00 / AN10 | Magic6 Pro | 2024 |
| N19 / N29 | Magic5 | 2023 |
8.3 代码中的正确处理
Future<String> identifyPGTDevice(String machineId) async {
if (!machineId.startsWith('PGT')) {
return await OhosProductName().lookup(machineId);
}
// PGT 代号需要特别注意
final name = await OhosProductName().lookup(machineId);
print('PGT 设备识别: $machineId → $name');
// 映射表已经处理了区分逻辑,直接使用即可
// PGT-AN00/AN10 → Magic6 Pro
// PGT-N19/N29 → Magic5
return name;
}
实际上 apple_product_name 的映射表已经正确处理了 PGT 代号的区分——每个完整的型号标识符都有唯一的映射。开发者只需要使用 lookup() 传入完整型号即可。
注意:这与华为系列中的代号共用问题类似(如 Mate 系列的 GGK、nova 系列的 FOA、MatePad 系列的 GOT)。核心原则始终是:使用完整型号标识符查询,不要依赖前缀做推断。
九、型号命名规则详解
9.1 型号标识符结构
以 PGT-AN00 为例拆解荣耀设备的型号结构:
PGT-AN00
│ │
│ └── 后缀编码(网络制式 + 版本号)
└─────── 产品代号(标识产品线)
9.2 荣耀后缀与华为后缀的差异
| 后缀 | 荣耀含义 | 华为含义 |
|---|---|---|
| AN | 全网通(国内) | 全网通(国内) |
| NX | 国际版 | — |
| LX | — | 国际版 |
| AL | — | 全网通 / 蜂窝版 |
| N | 特殊变体 | — |
9.3 荣耀设备产品代号一览
| 代号 | 产品 | 系列 | 发布年份 |
|---|---|---|---|
| PGT | Magic6 Pro / Magic5 | Magic | 2024 / 2023 |
| BVL | Magic6 | Magic | 2024 |
| FRI | Magic5 Pro | Magic | 2023 |
| RMO | Honor 200 Pro | 数字 | 2024 |
| ALI | Honor 200 | 数字 | 2024 |
| LLY | Honor 200 Lite | 数字 | 2024 |
| CMA | Honor 100 Pro | 数字 | 2023 |
| GIA | Honor 100 | 数字 | 2023 |
提示:荣耀设备的国际版后缀为 NX(如 NX9、NX1),而华为设备的国际版后缀为 LX(如 LX9)。这是两个品牌在编码体系上的一个显著差异,开发者在做跨品牌型号解析时需要注意。
十、荣耀与华为品牌区分
10.1 品牌检测逻辑
class BrandDetector {
static Future<String> getBrand() async {
final productName = await OhosProductName().getProductName();
if (productName.contains('Honor')) {
return 'Honor';
} else if (productName.contains('HUAWEI')) {
return 'HUAWEI';
}
return 'Unknown';
}
static Future<bool> isHonorDevice() async {
return await getBrand() == 'Honor';
}
static Future<bool> isHuaweiDevice() async {
return await getBrand() == 'HUAWEI';
}
}
10.2 品牌命名对照表
| 品牌 | 产品名称前缀 | 示例 |
|---|---|---|
| 华为 | HUAWEI | HUAWEI Mate 70, HUAWEI Pura 70 |
| 荣耀 | Honor | Honor Magic6 Pro, Honor 200 |
10.3 品牌区分的应用场景
品牌区分在多个业务场景中都有实际应用价值:
- 配件推荐:根据品牌推荐与设备生态相匹配的配件和服务
- 用户反馈:品牌信息帮助客服团队更快速地定位设备相关问题
- 数据分析:品牌维度的统计可以揭示不同品牌用户群体的行为差异
注意:荣耀于 2020 年底从华为独立运营,两个品牌的设备都运行在 OpenHarmony/HarmonyOS 生态中,但在软件功能和生态服务上已经有所分化。详见 华为开发者联盟。
十一、判断设备所属系列
11.1 系列判断逻辑
Future<void> checkHonorDevice() async {
final ohos = OhosProductName();
final productName = await ohos.getProductName();
if (productName.contains('Honor')) {
print('荣耀设备: $productName');
if (productName.contains('Magic')) {
print('Magic系列 - 旗舰产品');
if (productName.contains('Magic6')) {
print('Magic6系列 - 最新旗舰');
} else if (productName.contains('Magic5')) {
print('Magic5系列 - 上代旗舰');
}
} else if (productName.contains('200') || productName.contains('100')) {
print('数字系列 - 中高端产品');
}
}
}
11.2 荣耀产品线层级
| 层级 | 系列 | 定位 | 代表产品 |
|---|---|---|---|
| 旗舰 | Magic | AI 智能旗舰 | Magic6 Pro |
| 中高端 | 数字系列 | 均衡体验 | Honor 200 Pro |
| 入门 | X 系列 | 性价比 | 暂未收录 |
11.3 版本判断优先级
String getHonorTier(String productName) {
if (productName.contains('Pro')) return 'Pro';
if (productName.contains('Lite')) return 'Lite';
return 'Standard';
}
提示:荣耀数字系列的版本判断比 Magic 系列简单——Magic 系列只有 Pro 和标准版,数字系列则有 Pro、标准版和 Lite 三个层级。详见 Flutter MethodChannel API。
十二、完整荣耀设备映射汇总
12.1 全量映射表
// ========== 荣耀设备完整映射表 ==========
// Magic6 系列(4个型号)
"PGT-AN00": "Honor Magic6 Pro",
"PGT-AN10": "Honor Magic6 Pro",
"BVL-AN00": "Honor Magic6",
"BVL-AN10": "Honor Magic6",
// Magic5 系列(4个型号)
"FRI-AN00": "Honor Magic5 Pro",
"FRI-AN10": "Honor Magic5 Pro",
"PGT-N19": "Honor Magic5",
"PGT-N29": "Honor Magic5",
// Honor 200 系列(5个型号)
"RMO-AN00": "Honor 200 Pro",
"RMO-NX9": "Honor 200 Pro",
"ALI-AN00": "Honor 200",
"ALI-NX9": "Honor 200",
"LLY-NX1": "Honor 200 Lite",
// Honor 100 系列(4个型号)
"CMA-AN00": "Honor 100 Pro",
"CMA-NX9": "Honor 100 Pro",
"GIA-AN00": "Honor 100",
"GIA-NX9": "Honor 100",
12.2 统计汇总
| 系列 | 产品数 | 型号数 | 占映射表比例 |
|---|---|---|---|
| Magic6 | 2 | 4 | 约 3% |
| Magic5 | 2 | 4 | 约 3% |
| Honor 200 | 3 | 5 | 约 4% |
| Honor 100 | 2 | 4 | 约 3% |
| 荣耀合计 | 9 | 17 | 约 13% |
荣耀设备共 9 款产品、17 个型号标识符,占整个 HUAWEI_DEVICE_MAP 映射表约 13% 的条目。
十三、Magic 系列能力检测
13.1 Magic 系列专属能力
class MagicCapabilities {
static Future<Map<String, bool>> getMagicFeatures() async {
final productName = await OhosProductName().getProductName();
final isMagic = productName.contains('Magic');
final isMagic6 = productName.contains('Magic6');
final isPro = productName.contains('Pro');
return {
'hasMagicOS': productName.contains('Honor'),
'hasAIAssistant': isMagic,
'hasEyeProtection': productName.contains('Honor'),
'hasLatestAI': isMagic6,
'hasPremiumCamera': isPro,
};
}
}
13.2 能力矩阵
| 能力维度 | Magic6 Pro | Magic6 | Magic5 Pro | Magic5 | 数字系列 |
|---|---|---|---|---|---|
| MagicOS | ✓ | ✓ | ✓ | ✓ | ✓ |
| AI 助手 | ✓ | ✓ | ✓ | ✓ | — |
| 护眼技术 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 最新 AI | ✓ | ✓ | — | — | — |
| 旗舰影像 | ✓ | — | ✓ | — | — |
提示:所有荣耀设备都搭载了 MagicOS 操作系统和护眼技术,但 AI 助手和最新 AI 功能是 Magic 系列的专属能力。详见 OpenHarmony 设备信息 API。
十四、AI 功能差异化适配
14.1 分层 AI 功能
class HonorAIAdapter {
static Future<List<String>> getAIFeatures() async {
final productName = await OhosProductName().getProductName();
final features = <String>[];
if (!productName.contains('Honor')) return features;
// 基础 AI 功能(全系)
features.addAll(['AI语音助手', 'AI场景识别', 'AI翻译']);
// Magic 系列专属 AI
if (productName.contains('Magic')) {
features.addAll(['AI消除', 'AI扩图', 'AI问答', 'AI摘要']);
}
// Magic6 专属功能
if (productName.contains('Magic6')) {
features.addAll(['AI一键成片', 'AI实时字幕', 'AI智能体']);
}
return features;
}
}
14.2 AI 功能分层表
| AI 功能 | 全系荣耀 | Magic 系列 | Magic6 专属 |
|---|---|---|---|
| AI 语音助手 | ✓ | ✓ | ✓ |
| AI 场景识别 | ✓ | ✓ | ✓ |
| AI 翻译 | ✓ | ✓ | ✓ |
| AI 消除 | — | ✓ | ✓ |
| AI 扩图 | — | ✓ | ✓ |
| AI 一键成片 | — | — | ✓ |
| AI 智能体 | — | — | ✓ |
注意:AI 功能的分层递进设计使得开发者可以根据设备的 AI 能力等级来决定应用中 AI 相关功能的展示和启用策略,确保用户看到的功能都是其设备实际能够支持的。
十五、荣耀设备统计分析
15.1 分系列统计
Future<Map<String, int>> getHonorStatistics(List<String> machineIds) async {
final ohos = OhosProductName();
final stats = <String, int>{
'Magic6': 0,
'Magic5': 0,
'Honor 200': 0,
'Honor 100': 0,
'Other Honor': 0,
};
for (final id in machineIds) {
final name = await ohos.lookup(id);
if (!name.contains('Honor') && !name.contains('Magic')) continue;
if (name.contains('Magic6')) {
stats['Magic6'] = stats['Magic6']! + 1;
} else if (name.contains('Magic5')) {
stats['Magic5'] = stats['Magic5']! + 1;
} else if (name.contains('200')) {
stats['Honor 200'] = stats['Honor 200']! + 1;
} else if (name.contains('100')) {
stats['Honor 100'] = stats['Honor 100']! + 1;
} else {
stats['Other Honor'] = stats['Other Honor']! + 1;
}
}
return stats;
}
15.2 用户价值分层
| 用户层级 | 对应产品 | 特征 |
|---|---|---|
| 旗舰 | Magic6 Pro | AI 发烧友,追求最新技术 |
| 高端 | Magic6 / Magic5 Pro | 注重品质,愿意为体验付费 |
| 中高端 | Honor 200/100 Pro | 均衡需求,性价比导向 |
| 主流 | Honor 200/100 / Lite | 大众市场,基础功能为主 |
提示:Magic 系列用户占比较高时,应优先适配 MagicOS 的 AI 能力接口;数字系列用户占比更大时,应更注重在中端硬件上的性能优化。详见 Dart asynchronous programming。
十六、MagicOS 生态适配
16.1 生态能力检测
class HonorEcosystem {
static Future<Map<String, bool>> getEcosystemSupport() async {
final productName = await OhosProductName().getProductName();
if (!productName.contains('Honor')) {
return {'isHonorDevice': false};
}
final isMagic = productName.contains('Magic');
return {
'isHonorDevice': true,
'supportsMagicRing': isMagic,
'supportsMultiScreen': true,
'supportsHonorWatch': true,
'supportsSmartHome': isMagic,
};
}
}
16.2 MagicOS 核心功能
| 功能 | 说明 | Magic 专属 |
|---|---|---|
| Magic Ring | 多设备无缝协同 | ✓ |
| Magic Capsule | 灵动胶囊信息展示 | ✓ |
| Magic Portal | 长按跳转相关应用 | ✓ |
| Magic Text | 智能文本识别处理 | ✓ |
| 多屏协同 | 手机与平板协同 | — |
16.3 生态适配建议
开发者可以根据设备的生态支持情况来决定是否集成跨设备协同功能:
- 在支持 Magic Ring 的设备上提供任务流转和内容接力功能
- 在支持多屏协同的设备上提供数据同步功能
- 利用 Magic Capsule 展示实时活动信息
- 集成 Magic Text 实现智能文本处理
提示:MagicOS 的生态功能是荣耀设备区别于其他品牌的核心竞争力之一。开发者可以通过集成这些平台特色功能,为荣耀用户提供更加原生和流畅的使用体验。详见 Flutter 插件开发指南。
十七、映射表维护与新设备更新
17.1 更新流程
当荣耀发布新的 Magic 系列或数字系列产品时,映射表需要及时更新:
- 获取新设备的型号标识符(通过官方文档或真机读取
deviceInfo.productModel) - 在
HUAWEI_DEVICE_MAP中添加新条目 - 提交 Pull Request 到 apple_product_name 仓库
- 发布新版本
17.2 如何获取新设备的型号标识符
// 在新设备上运行以下代码获取型号
final machineId = await OhosProductName().getMachineId();
print('新设备型号: $machineId');
// 将输出的型号标识符提交到映射表
17.3 版本管理建议
- 映射表更新应遵循语义化版本:新增设备 → minor 版本号递增
- 每次更新记录 changelog,注明新增了哪些设备
- 确保向后兼容——只增不删,已有映射不修改
提示:欢迎社区开发者通过 GitCode 提交 Pull Request 贡献新设备映射,共同维护一个完整准确的设备数据库。
十八、常见问题与排查
18.1 FAQ
| 问题 | 原因 | 解决方案 |
|---|---|---|
| PGT-N19 被识别为 Magic6 Pro | 使用了前缀匹配而非完整型号 | 使用 lookup 传入完整型号 |
| 荣耀设备被判断为华为设备 | 品牌判断逻辑错误 | 检查 Honor vs HUAWEI 前缀 |
| lookup 返回原始 machineId | 映射表中没有该型号 | 检查是否为新设备,提交 PR 补充 |
| getProductName 返回 Unknown | 非荣耀/华为设备或插件未注册 | 检查设备品牌和插件配置 |
18.2 调试技巧
Future<void> debugHonorDevice() async {
final ohos = OhosProductName();
// 1. 先获取原始型号
final machineId = await ohos.getMachineId();
print('原始型号: $machineId');
// 2. 查映射表
final productName = await ohos.lookup(machineId);
print('映射结果: $productName');
// 3. 判断品牌
final isHonor = productName.contains('Honor');
final isHuawei = productName.contains('HUAWEI');
print('品牌: ${isHonor ? "荣耀" : isHuawei ? "华为" : "未知"}');
// 4. 判断系列
if (isHonor) {
final isMagic = productName.contains('Magic');
print('系列: ${isMagic ? "Magic旗舰" : "数字系列"}');
}
}
18.3 映射表未命中的降级策略
当遇到映射表中没有的新型号时,apple_product_name 的降级逻辑是:
lookup(machineId)→ 返回原始 machineId(如"PGT-AN00")lookupOrNull(machineId)→ 返回nullgetProductName()→ 尝试读取系统marketName,如果也为空则返回productModel
注意:降级策略保证了即使映射表不完整,应用也不会崩溃。但降级后的显示效果不够友好,所以及时更新映射表仍然很重要。详见 PlatformException API 文档。
总结
荣耀设备在 apple_product_name 映射表中共有 17 个型号标识符,覆盖 Magic6、Magic5、Honor 200、Honor 100 四个系列的 9 款产品。核心要点:PGT 代号被 Magic6 Pro 和 Magic5 跨代复用,必须使用完整型号匹配;荣耀设备产品名称以 “Honor” 开头,华为设备以 “HUAWEI” 开头,品牌识别清晰;荣耀国际版后缀为 NX,华为国际版后缀为 LX。开发者应使用 getProductName() 返回的友好名称做系列判断,而非直接比对 machineId。
下一篇文章将介绍插件架构设计解析,敬请期待。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- OpenHarmony适配仓库:flutter_apple_product_name
- 开源鸿蒙跨平台社区:openharmonycrossplatform
- Flutter Platform channels:官方文档
- Flutter MethodChannel API:MethodChannel class
- PlatformException:API 文档
- Dart async/await:Dart asynchronous programming
- Flutter 插件开发指南:Developing packages & plugins
- OpenHarmony 设备信息 API:deviceInfo 文档
- 华为开发者联盟:官方网站
- Flutter 测试文档:Testing Flutter apps
更多推荐
所有评论(0)