前言

大家好,我是若城, 本文章将一步步集成并使用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 技术支持获取对应的测试凭证。

参数说明

字段 类型 必须 说明
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 眼镜进行数据交互的全过程。

更多推荐