【征文计划】CXR-M SDK:轻松构建手机与AR眼镜的协同应用
文章目录
前言
大家好,我是若城, 本文章将一步步集成并使用CXR-M SDK,轻松实现手机 App 与 Rokid AR 眼镜之间的奇妙联动。无论你是想开发一款远程控制应用,还是构建复杂的协同交互场景,CXR-M SDK 都将是你最得力的助手。
本文档主要基于 Kotlin 语言进行讲解(版本 1.0.1+),让我们开始这段激动人心的开发之旅吧!
什么是 CXR-M SDK
CXR-M SDK 是面向移动端的开发工具包,主要用于构建手机端与 Rokid Glasses 的控制和协同应用。开发者可以通过 CXR-M SDK 与眼镜建立稳定连接,实现数据通信、实时音视频获取以及场景自定义。它适合需要在手机端进行界面交互、远程控制或与眼镜端配合完成复杂功能的应用。
在1.0.1 版本中CXR-M SDK 仅提供 Android 版本。注意本篇内容主要是基于Kotlin 进行的讲解说明
快速集成
添加 Maven 仓库
首先,请在你的项目根目录 build.gradle 文件中,找到 allprojects -> repositories 节点,并添加 Rokid 的 Maven 仓库地址。
// build.gradle (Project)
allprojects {
repositories {
google()
jcenter()
// 添加 Rokid Maven 仓库
maven { url "https://dl.bintray.com/rokid/maven/" }
}
}
添加 SDK 依赖
接着,在你的主模块 build.gradle 文件中,加入最新的 SDK 依赖。请将 1.x.x 替换为最新的版本号。
// build.gradle (Module: app)
dependencies {
// ... 其他依赖
implementation 'com.rokid.mobile:sdk:1.x.x'
}
配置 Kotlin 环境
如果你的项目尚未配置 Kotlin,请按以下步骤添加支持:
-
添加 Kotlin 插件 classpath (项目根目录
build.gradle):buildscript { dependencies { // 将 x.x.x 替换为你的 Kotlin 版本 classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:x.x.x' } } -
应用 Kotlin 插件 (模块
build.gradle):apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -
导入 Kotlin 标准库 (模块
build.gradle):dependencies { // 将 x.x.x 替换为你的 Kotlin 版本 implementation 'org.jetbrains.kotlin:kotlin-stdlib:x.x.x' }
初始化 SDK
重要提示:在使用 SDK 的任何功能之前,必须先完成初始化,否则所有调用都将失败。
建议在 Application 类的 onCreate() 方法中执行初始化。
- 获取凭证:
appKey,appSecret,accessKey是使用 SDK 的必要凭证,请前往 Rokid 开放平台 申请。 - 环境区分:请注意,线上环境和测试环境的凭证是不同的。如需在测试环境开发,请联系 Rokid 技术支持获取对应的测试凭证。
参数说明
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
context |
Context | 是 | 应用上下文 |
appKey |
String | 是 | Rokid 提供的 App Key |
appSecret |
String | 是 | Rokid 提供的 App Secret |
accessKey |
String | 是 | Rokid 提供的 Access Key |
示例代码 (Kotlin 风格)
import com.rokid.mobile.sdk.RokidMobileSDK
import com.rokid.mobile.sdk.callback.SDKInitCompletedCallback
import android.util.Log
// 在 Application.onCreate() 中调用
RokidMobileSDK.init(context, appKey, appSecret, accessKey, object : SDKInitCompletedCallback {
override fun onInitSuccess() {
Log.d("RokidSDK", "SDK 初始化成功!")
// 在这里可以进行下一步操作
}
override fun onInitFailed(errorCode: String, errorMsg: String) {
Log.e("RokidSDK", "SDK 初始化失败: code=$errorCode, msg=$errorMsg")
// 根据错误信息进行处理,例如提示用户
}
})
调试与环境切换
为了方便开发和调试,CXR-M SDK 支持在不同环境间切换。
1 切换环境
通过 RokidMobileSDK.env() 方法可以轻松切换。
环境配置参数
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
env |
SDKEnvType |
是 | RELEASE: 线上环境,面向最终用户。PRE: 预发环境,用于上线前验证。DEV: 测试环境,用于开发阶段调试。 |
示例代码
// 切换到预发环境进行调试
RokidMobileSDK.env(SDKEnvType.PRE)
2 开启日志
在开发阶段,开启详细日志可以帮助你快速定位问题。
// 开启 SDK 日志输出
RokidMobileSDK.openLog(true)
核心功能:本地闹钟管理 (Local Alarm)
SDK 支持对设备上的本地闹钟进行管理。本地闹钟仅存储在当前设备上。
基本流程

1 获取闹钟列表
请求并获取设备上已设置的所有本地闹钟。
RokidMobileSDK.skill.alarm().getList(deviceId, object : GetAlarmListCallback {
override fun onSucceed(alarmList: MutableList<SDKAlarm>?) {
Log.d("RokidAlarm", "获取本地闹钟列表成功: ${alarmList?.size ?: 0} 个")
// 更新 UI,展示闹钟列表
}
override fun onFailed(errorCode: String?, errorMessage: String?) {
Log.e("RokidAlarm", "获取本地闹钟列表失败: $errorCode, $errorMessage")
}
})
SDKAlarm 字段说明
| 参数 | 类型 | 必须 | 说明与规范 |
|---|---|---|---|
id |
Int | 是 | 闹钟的唯一标识 ID,用于后续的更新或删除操作。 |
year |
Int | 是 | 触发年份,如 2025。 |
month |
Int | 是 | 触发月份 (1-12)。 |
day |
Int | 是 | 触发日期 (1-31),需注意月份与闰年的合法性。 |
hour |
Int | 是 | 触发小时 (0-23),24小时制。 |
minute |
Int | 是 | 触发分钟 (0-59)。 |
repeatType |
String | 是 | 重复模式,建议使用 SDKRepeatType 枚举,如 SDKRepeatType.WEEKDAY。 |
repeatText |
String | 是 | 重复模式的描述文本,用于 UI 展示,如“每周一、三、五”。 |
2 添加闹钟
创建一个新的本地闹钟并同步到设备。
val newAlarm = SDKAlarm().apply {
year = 2025
month = 10
day = 24
hour = 9
minute = 30
repeatType = SDKRepeatType.WEEKDAY // 工作日重复
repeatText = "工作日"
}
RokidMobileSDK.skill.alarm().add(deviceId, newAlarm, object : IChannelPublishCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "添加本地闹钟成功!")
}
override fun onFailed() {
Log.e("RokidAlarm", "添加本地闹钟失败。")
}
})
SDKRepeatType 枚举说明
| 枚举值 | 中文含义 | 分类场景 |
|---|---|---|
SDKRepeatType.ONCE |
仅此一次 | 单次触发 |
SDKRepeatType.EVERYDAY |
每天 | 每日重复 |
SDKRepeatType.WEEKDAY |
工作日 | 周期性重复 |
SDKRepeatType.WEEKEND |
每周末 | 周期性重复 |
SDKRepeatType.EVERY_MONDAY |
每周一 | 固定周几重复 |
... |
... |
... |
SDKRepeatType.EVERY_SUNDAY |
每周日 | 固定周几重复 |
3 删除闹钟
根据闹钟对象删除一个已存在的本地闹钟。
// alarmToDelete 是一个已获取到的 SDKAlarm 对象
RokidMobileSDK.skill.alarm().delete(deviceId, alarmToDelete, object : IChannelPublishCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "删除本地闹钟成功!")
}
override fun onFailed() {
Log.e("RokidAlarm", "删除本地闹钟失败。")
}
})
4 更新闹钟
更新一个已存在的本地闹钟信息。
// oldAlarm 是待更新的闹钟,newAlarm 是包含新信息的闹钟对象
RokidMobileSDK.skill.alarm().update(deviceId, oldAlarm, newAlarm, object : IChannelPublishCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "更新本地闹钟成功!")
}
override fun onFailed() {
Log.e("RokidAlarm", "更新本地闹钟失败。")
}
})
核心功能:云闹钟管理 (Cloud Alarm)
除了本地闹钟,SDK 还支持云闹钟管理。云闹钟会同步到用户的 Rokid 账户,可在不同设备间同步。
1 获取云闹钟列表
请求并获取账户下所有的云闹钟。
RokidMobileSDK.skill.cloudAlarm().getList(deviceId, object : SDKGetAlarmListCallback {
override fun onSucceed(alarmList: MutableList<SDKAlarm>?) {
Log.d("RokidAlarm", "获取云闹钟列表成功: ${alarmList?.size ?: 0} 个")
}
override fun onFailed(errorCode: String?, errorMessage: String?) {
Log.e("RokidAlarm", "获取云闹钟列表失败: $errorCode, $errorMessage")
}
})
2 添加云闹钟
创建一个新的云闹钟。
val newCloudAlarm = SDKAlarm().apply {
year = 2025
month = 12
day = 25
hour = 8
minute = 0
repeatType = SDKRepeatType.ONCE
repeatText = "圣诞节"
}
// 确保 deviceId 不为 null
deviceId?.let {
RokidMobileSDK.skill.cloudAlarm().add(it, newCloudAlarm, object : SDKOperateAlarmCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "添加云闹钟成功!")
}
override fun onFailed(errorCode: String?, errorMessage: String?) {
Log.e("RokidAlarm", "添加云闹钟失败: $errorCode, $errorMessage")
}
})
}
3 删除云闹钟
根据闹钟对象删除一个已存在的云闹钟。
// alarmToDelete 是一个已获取到的云闹钟 SDKAlarm 对象
RokidMobileSDK.skill.cloudAlarm().delete(deviceId, alarmToDelete, object : SDKOperateAlarmCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "删除云闹钟成功!")
}
override fun onFailed(errorCode: String?, errorMessage: String?) {
Log.e("RokidAlarm", "删除云闹钟失败: $errorCode, $errorMessage")
}
})
4 更新云闹钟
更新一个已存在的云闹钟信息。
// alarmToUpdate 是包含最新信息的云闹钟对象
RokidMobileSDK.skill.cloudAlarm().update(deviceId, alarmToUpdate, object : SDKOperateAlarmCallback {
override fun onSucceed() {
Log.d("RokidAlarm", "更新云闹钟成功!")
}
override fun onFailed(errorCode: String?, errorMessage: String?) {
Log.e("RokidAlarm", "更新云闹钟失败: $errorCode, $errorMessage")
}
})
总结
好啦通过本篇文章,你已经掌握Rokid CXR-M SDK的基础集成与核心使用方法。我们不仅讲解了如何配置项目、初始化 SDK,还通过本地和云闹钟两个完整示例,了解了与 AR 眼镜进行数据交互的全过程。
更多推荐
所有评论(0)