系列文章《鸿蒙开发从入门到专家》第 27 篇 · 专家
手机应用和车机应用虽然都是鸿蒙,但设计目标和运行环境差异很大。车机屏幕更大、使用场景更特殊、对安全性要求更高。直接把手机应用搬到车上,体验往往很灾难。
本文把车机应用开发的几个关键差异点拆开讲:设备能力判断、多屏适配、驾驶模式限制和媒体焦点。
一、车机设备能力识别
鸿蒙通过 deviceInfo 和 display 相关 API 可以判断当前设备的类型和屏幕参数。
import { deviceInfo } from '@kit.BasicServicesKit';
const deviceType = deviceInfo.deviceType;
console.info(`当前设备类型:${deviceType}`);
车机常见的 deviceType 是 car、tablet 或 2in1,具体取决于厂商定义。更可靠的方式是读取窗口大小和屏幕密度,按实际可用空间布局:
import { display } from '@kit.ArkUI';
const displayInfo = display.getDefaultDisplaySync();
const widthPx = displayInfo.width;
const heightPx = displayInfo.height;
const density = displayInfo.densityPixels;
拿到像素尺寸后,可以按断点(breakpoint)设计布局。例如宽度超过 840vp 用双栏,小于 600vp 用单栏。
二、多屏与多窗口
高端车型通常有仪表屏、中控屏、副驾屏、后排屏。鸿蒙车机支持多显示器,应用可能需要同时显示不同内容。
窗口管理可以通过 window 模块实现:
import { window } from '@kit.ArkUI';
const windowStage = getContext(this).windowStage;
const mainWindow = windowStage.getMainWindowSync();
mainWindow.setFullScreen(true);
如果应用需要在多个屏幕上展示不同 UI,通常需要配合系统提供的多 Ability 或多窗口模式。具体实现和车型能力强相关,不同车厂的扩展屏协议可能不同。
三、驾驶模式:安全优先
车机应用最大的特殊点是安全约束。驾驶过程中,界面不能分散司机注意力。常见限制包括:
禁止播放视频。
限制文字输入长度和交互复杂度。
按钮尺寸必须足够大,方便盲操。
高对比度、大字号,适应车内外光线变化。
鸿蒙提供了驾驶状态相关的系统服务,应用可以读取当前是否处于驾驶模式:
import { abilityAccessCtrl } from '@kit.AbilityKit';
// 实际接口可能因车型和系统版本而异,需参考具体车机 SDK
更实际的做法是:产品设计之初就把“驾驶中不可用”的模块标记出来,进入驾驶模式后自动禁用或简化。
四、音频焦点管理
车机里同时可能有导航语音、音乐、电话、系统提示在抢音频输出。应用必须按规范申请和释放音频焦点,不能自顾自播放。
import { audio } from '@kit.AudioKit';
const audioManager = audio.getAudioManager();
const audioRenderer = await audio.createAudioRenderer({
streamUsage: audio.StreamUsage.STREAM_USAGE_MUSIC,
rendererFlags: 0,
});
await audioRenderer.start();
当导航语音需要播放时,系统会通知音乐应用降低音量或暂停。音乐应用应监听焦点变化,而不是被强制静音后才处理。
五、交互设计建议
车机 UI 不要照搬手机。几个血泪教训:
手势要少:开车时滑动操作容错率低,优先用点击。
层级要浅:核心功能三步以内必须到达。
反馈要明显:声音、震动、高亮都要有,让用户知道操作生效。
夜间模式:自动根据车灯或时间切换深色主题,减少眩光。
六、实战:车载音乐播放器
一个合格的车载音乐播放器应该具备:
启动后自动按车机屏幕尺寸调整布局。
大封面 + 大按钮,适合远距离观看和操作。
播放时申请音频焦点,来电或导航时自动降音或暂停。
进入驾驶模式后,隐藏歌词、禁用搜索输入。
支持方向盘按键控制,通过 KeyEvent 监听上一首/下一首/暂停。
小结
车机开发不是把 UI 放大那么简单。核心是安全、可控、适合驾驶场景:
按设备类型和屏幕尺寸做适配。
多屏场景下合理分配内容。
遵守驾驶模式的安全限制。
规范使用音频焦点,不和系统抢资源。
下一篇我们聊聊另一个垂直设备:手表。