主题、通知和通话分别接入。先实现对应驱动和界面,再打开配置开关。
日夜主题与手机电量
phone_state 默认开启。收到 MOTO_EVENT_PHONE_STATE 后:
| 字段 | 怎么用 |
|---|---|
e.data.phone.theme |
MOTO_THEME_DAY / MOTO_THEME_NIGHT,切换仪表主题 |
e.data.phone.battery_percent |
手机电量 0–100;-1 表示尚未取得 |
e.data.phone.charging |
显示手机是否正在充电 |
这是手机状态。车辆电量按控车与车况上报。
显示 Android 通知
创建 SDK 前设置 c.notifications = true。用户还需在 APP 开启通知共享,并允许 Android 通知访问。
收到 MOTO_EVENT_NOTIFICATION 时,用 e.data.notification.app、title、text 显示应用名、标题和正文;按 ttl_ms(有效毫秒数)移除过期通知。收到 MOTO_EVENT_NOTIFICATION_REMOVE 时,移除 e.data.object.id 对应的通知。
需要通知按钮时,按 actions 提供的权限显示。用户点击后调用 moto_terminal_notification_action(t, &saved_event, action);action=0 为正向操作,1 为负向操作。保存并传入原通知事件,用 MOTO_EVENT_ACTION_RESULT 确认操作结果。
**验证:**手机出现新通知时仪表显示;撤销共享或通知过期后,不继续展示旧内容。
显示 iPhone 通知
iPhone 通过 **ANCS(苹果的蓝牙通知服务)**直接共享通知。它需要终端蓝牙驱动完成服务发现、授权和订阅,不能只打开一个 SDK 开关。
完成这些适配后,设置 c.ancs = true,并提供 ancs_ready 回调,返回真实的加密连接及订阅就绪状态。接入包中的 moto_ancs_* 接口用于属性请求和数据解析,在独立的蓝牙适配任务中顺序调用。
MOTO_EVENT_ANCS_SHARING 仅表示用户想开启或关闭共享,不代表系统已经授权成功。
接入通话控制
开发板需要具备 **HFP(蓝牙免提通话协议)**或约定的通话驱动。完成适配后设置 c.calls = true。SDK 不提供音频传输或 HFP 蓝牙栈。
| 操作方向 | 调用方式 |
|---|---|
| 通话驱动有新状态 | moto_terminal_report_call(t, call_id, state, actions) |
| 仪表用户点接听、拒接、挂断 | moto_terminal_call_action(t, &saved_call_event, action) |
收到 MOTO_EVENT_CALL_ACTION |
交给通话驱动,随后用原事件调用 moto_terminal_complete 回报 |
call_id 是非零通话编号。state:0 未知、1 响铃、2 接通、3 保持、4 结束。允许的 actions 位:1 接听、2 拒接、4 挂断;单次 action 则是 0 接听、1 拒接、2 挂断。
MOTO_EVENT_CALL 的 valid=false 表示状态已失效,移除旧按钮。接听指令提交后,仍以通话驱动后续上报的状态为准。
音乐从哪里播放
音乐和通话声音由手机、头盔或车载蓝牙音频设备播放。SDK 的 BLE 数据连接负责控制和状态,不传音乐音频。需要车载音频时,在平台确认阶段提供蓝牙芯片及音频栈信息。
断连时清除临时通知和通话界面。通知正文、号码和 PIN 不写入普通日志。
