前言

大家好,我是若城, 本文章将一步步集成并使用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,请按以下步骤添加支持:

  1. 添加 Kotlin 插件 classpath (项目根目录 build.gradle):

    buildscript {
        dependencies {
            // 将 x.x.x 替换为你的 Kotlin 版本
            classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:x.x.x'
        }
    }
    
  2. 应用 Kotlin 插件 (模块 build.gradle):

    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    
  3. 导入 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 技术支持获取对应的测试凭证。

参数说明

字段类型必须说明
contextContext应用上下文
appKeyStringRokid 提供的 App Key
appSecretStringRokid 提供的 App Secret
accessKeyStringRokid 提供的 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() 方法可以轻松切换。

环境配置参数

字段类型必须说明
envSDKEnvTypeRELEASE: 线上环境,面向最终用户。
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 字段说明

参数类型必须说明与规范
idInt闹钟的唯一标识 ID,用于后续的更新或删除操作。
yearInt触发年份,如 2025
monthInt触发月份 (1-12)。
dayInt触发日期 (1-31),需注意月份与闰年的合法性。
hourInt触发小时 (0-23),24小时制。
minuteInt触发分钟 (0-59)。
repeatTypeString重复模式,建议使用 SDKRepeatType 枚举,如 SDKRepeatType.WEEKDAY
repeatTextString重复模式的描述文本,用于 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 眼镜进行数据交互的全过程。

更多推荐