更新记录
1.3.0(2026-09-16)
- feat: 基于官方 Android AAR / iOS 静态库 / 微信 Manridy 插件重写,覆盖协议全量 API
- feat: App-iOS 正式支持(Swift CoreBluetooth + libMRD2019)
- feat: 扩展压力 / 血糖 / 体温 / 血压 / HRV / ECG / 计步历史 / 设备设置等接口
- fix: Android
Manridy.init、指令队列顺序下发、健康字段兜底解析 - fix: iOS 禁止导出
init(Swift 保留字),统一使用initSdk,业务层可兼容init - fix: Vite / 微信小程序提供根目录明文
index.js,避免加密.uts导致Unexpected "�" - chore: 插件目录与市场插件 ID 对齐为
ajun-manridy-sdk
1.2.5(2026-08-25)
- fix(iOS): 按官方规范将全部
.h与.a扁平放入Libs/libMRD2019/,移除非官方Headers/目录 - fix(iOS):
config.json去掉非官方字段headerSearchPaths - chore: 普通授权版售价保持 199.00;业务工程恢复
extends.sn(收费插件授权必需)
1.2.4(2026-08-25)
- fix: 业务工程移除
extends.sn,避免云打包按「普通授权版」加密链路编译本地源码 - fix: 清理
index.uts/interface.uts异常隔行空行;删除重复 iOS.a与废弃 CRP aar - fix: Android Kotlin
catch (_)/pollFirst兼容云端编译器
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | - | - | √ | - | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
Manridy 智能戒指 SDK(UTS)
智能戒指 BLE 能力的 UniApp 插件。统一封装 App-Android、App-iOS 与 微信小程序,提供扫描连接、电量、步数、睡眠、心率、血氧及协议全量能力。
| 平台 | 支持 | 底层能力 |
|---|---|---|
| App-Android | ✅ | MRD SDK AAR(sdk_mrd2026_1.3.0) |
| App-iOS | ✅ | MRD 静态库(libMRD2019.framework) |
| 微信小程序 | ✅ | 微信插件 Manridy@1.0.8 |
| H5 / 其他小程序 | ❌ | 不支持 |
- 插件类型:UTS(App)+ 明文 JS(微信小程序)
- 最低 HBuilderX:
3.6.8+ - Vue3:支持;Vite 微信小程序:支持(勿直接引用加密
.uts)
Vite / 微信小程序重要说明
付费 UTS 上架后,.uts 会被市场加密。Vite/esbuild 无法解析加密二进制,会报 Unexpected "�"。
本插件已处理:
| 端 | 入口 | 说明 |
|---|---|---|
| 微信小程序 / Vite | 根目录 index.js → utssdk/mp-weixin/index.js |
明文,可直接 import |
| App-Android | utssdk/app-android(UTS) |
HBuilderX / 云打包处理,可加密 |
| App-iOS | utssdk/app-ios(UTS) |
HBuilderX / 云打包处理,可加密 |
业务统一写法:
import {
init,
initSdk,
startScan,
connect
} from '@/uni_modules/ajun-manridy-sdk'
不要再绕开插件单独 requirePlugin('Manridy')(除非自行封装)。插件内部已封装 Manridy。
App-iOS 请优先调用
initSdk()。UTS 会把init编成 Swift 保留字导致云打包失败;Android / 微信仍可用init()。
功能列表
- 蓝牙扫描、连接、断开
- 时间同步、用户信息下发
- 电量 / 固件版本查询
- 今日步数(距离、卡路里)与计步历史
- 睡眠数据查询
- 心率 / 血氧 / 血压 / 体温 / 血糖 / 压力 / HRV / ECG 测量与历史
- 设备设置:亮度、久坐、喝水、勿扰、翻腕、单位、闹钟、消息等
- 统一事件回调:连接态、电量、步数、睡眠、心率、血氧、血压、体温等
安装
方式一:插件市场
在 HBuilderX 中从插件市场导入本插件到项目 uni_modules。
方式二:手动拷贝
你的项目/
└─ uni_modules/
└─ ajun-manridy-sdk/
权限说明(必读)
一、Android 清单权限
插件已内置权限声明,云打包一般会自动合并。若自定义权限或离线打包,请在 manifest.json → app-plus → distribute → android → permissions 中配置:
[
"<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>"
]
二、Android 运行时动态权限
扫描前必须动态申请,并引导用户打开系统蓝牙;Android 6–11 还需打开定位服务。
| 系统版本 | 动态申请权限 |
|---|---|
| Android 6–11 | ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION |
| Android 12+(API 31+) | BLUETOOTH_SCAN、BLUETOOTH_CONNECT(建议同时申请定位) |
function requestRingPermissions() {
return new Promise((resolve, reject) => {
// #ifdef APP-PLUS
const permissions = [
'android.permission.ACCESS_FINE_LOCATION',
'android.permission.ACCESS_COARSE_LOCATION',
'android.permission.BLUETOOTH_SCAN',
'android.permission.BLUETOOTH_CONNECT'
]
plus.android.requestPermissions(
permissions,
(result) => {
const denied = (result.deniedAlways || []).concat(result.deniedPresent || [])
if (denied.length) {
reject(new Error('权限被拒绝: ' + denied.join(',')))
return
}
resolve(result)
},
(err) => reject(err)
)
// #endif
// #ifndef APP-PLUS
resolve()
// #endif
})
}
三、微信小程序权限与插件
- 在微信公众平台为当前小程序申请使用插件:
插件 AppID(provider):wxfedd2dfd173a9f40
插件名称:Manridy
版本:1.0.8
- 在
manifest.json→ 微信小程序配置 → 插件配置:
{
"Manridy": {
"version": "1.0.8",
"provider": "wxfedd2dfd173a9f40"
}
}
- 小程序需开通:蓝牙、位置(用于 BLE 扫描,部分安卓机型依赖定位服务)。
四、隐私与数据说明
- 本插件不含广告
- 本插件不采集、不上报用户数据
- 蓝牙数据仅在手机与戒指之间本地传输
快速使用
1. 引入
import {
init,
initSdk,
startScan,
stopScan,
connect,
disconnect,
onDeviceFound,
onConnectionStateChange,
onBatteryChange,
onStepsChange,
onSleepChange,
onHeartRateChange,
onBloodOxygenChange,
onData,
syncTime,
queryBattery,
queryFirmwareVersion,
queryCurrentSteps,
queryHistorySleep,
startMeasureHeartRate,
stopMeasureHeartRate,
startMeasureBloodOxygen,
stopMeasureBloodOxygen,
sendUserInfo
} from '@/uni_modules/ajun-manridy-sdk'
2. 推荐调用顺序
initSdk() / init()
→ 申请权限 / 打开蓝牙(及定位服务)
→ 注册 onXxx 回调
→ startScan()
→ connect({ deviceId })
→ syncTime() / sendUserInfo()
→ queryXxx() / startMeasureXxx()
3. 完整示例
initSdk()
onDeviceFound((device) => {
console.log('发现设备', device.name, device.deviceId, device.rssi)
})
onConnectionStateChange((res) => {
// res.state: connecting | connected | disconnected | disconnecting
console.log('连接状态', res.state, res.code)
})
onBatteryChange((res) => {
console.log('电量', res.battery)
})
onStepsChange((res) => {
console.log('步数', res.steps, res.distance, res.calories)
})
onSleepChange((res) => {
console.log('睡眠', res.totalTime, res.deepTime, res.lightTime)
})
onHeartRateChange((res) => {
console.log('心率', res.heartRate)
})
onBloodOxygenChange((res) => {
console.log('血氧', res.bloodOxygen)
})
onData((res) => {
console.log('原始事件', res)
})
// App 端请先 await requestRingPermissions()
startScan({
timeout: 10000,
fail(err) {
console.error(err)
}
})
connect({
deviceId: 'XX:XX:XX:XX:XX:XX',
success() {
syncTime()
sendUserInfo({
height: 170,
weight: 65,
gender: 1, // 0 女 / 1 男
age: 28,
stepLength: 70
})
queryBattery()
queryCurrentSteps()
},
fail(err) {
console.error(err)
}
})
API 说明
常用方法
| 方法 | 参数 | 说明 |
|---|---|---|
| initSdk() / init() | — | 初始化 SDK(iOS 请用 initSdk) |
| startScan(options?) | timeout?: number | 开始扫描 |
| stopScan() | — | 停止扫描 |
| connect(options) | deviceId: string | 连接设备 |
| disconnect() | — | 断开连接 |
| syncTime(options?) | 回调可选 | 同步手机时间到戒指 |
| queryBattery() | — | 查询电量(结果走 onBatteryChange) |
| queryFirmwareVersion() | — | 查询固件版本 |
| queryCurrentSteps() | — | 查询今日步数 |
| queryHistorySleep() | — | 查询睡眠 |
| startMeasureHeartRate() | — | 开始心率测量 |
| stopMeasureHeartRate() | — | 停止心率测量 |
| startMeasureBloodOxygen() | — | 开始血氧测量 |
| stopMeasureBloodOxygen() | — | 停止血氧测量 |
| sendUserInfo(info) | 见下表 | 下发用户信息 |
| invoke(action, params?) | action 名 + 参数 | 透传协议动作(全量扩展入口) |
sendUserInfo 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| height | number | 身高(cm) |
| weight | number | 体重(kg) |
| gender | number | 0 女 / 1 男 |
| age | number | 年龄 |
| stepLength | number | 步长(cm) |
事件回调
| 方法 | 回调数据 | 说明 |
|---|---|---|
| onDeviceFound(cb) | { name, deviceId, rssi } | 扫描到设备 |
| onConnectionStateChange(cb) | { state, code } | 连接状态变化 |
| onBatteryChange(cb) | { battery } | 电量 |
| onStepsChange(cb) | { steps, distance, calories, time } | 步数 |
| onSleepChange(cb) | { totalTime, deepTime, lightTime, awakeTime, remTime } | 睡眠 |
| onHeartRateChange(cb) | { heartRate } | 心率 |
| onBloodOxygenChange(cb) | { bloodOxygen } | 血氧 |
| onBloodPressureChange(cb) | 血压字段 | 血压 |
| onTemperatureChange(cb) | 体温字段 | 体温 |
| onGlucoseChange(cb) | 血糖字段 | 血糖 |
| onStressChange(cb) | 压力字段 | 压力 |
| onHrvChange(cb) | HRV 字段 | HRV |
| onData(cb) | { event, data } | 原始/扩展事件 |
健康类接口请先注册对应
onXxx,再调用query/measure。
历史查询通用 type:0 最近一次 / 1 历史详情 / 2 历史条数。可通过 getHrData、getBoData、getBpData、getTempData、getGluData、getHrvData、getSleep 等接口传入。
混淆配置(Android 发行包)
-keep class com.manridy.** { *; }
-dontwarn com.manridy.**
注意事项
- 必须真机调试:模拟器无法完成 BLE 扫描与连接。
- 先权限后扫描:未授权或未开定位服务时,Android 常见现象是“扫不到设备”。
- 先监听后查询:
queryBattery、queryCurrentSteps、测量类接口的结果通过onXxx回调返回。 - 两端底层不同:Android / iOS 走官方 MRD 协议库 + 自研 BLE;微信走厂商插件 Manridy。
- 微信插件授权:未在公众平台申请
Manridy插件时,小程序端无法requirePlugin。 - 断开重连:Android 建议
disconnect后稍候再connect,提高成功率。 - App 调试:Android / iOS 需制作 UTS 自定义基座。
- 收费授权:云打包正式包请保留插件市场下发的
extends.sn。
常见问题
Q:扫描列表一直为空?
A:检查蓝牙开关、定位权限、定位服务;Android 12+ 检查 BLUETOOTH_SCAN / BLUETOOTH_CONNECT;尽量靠近设备并摘下戒指充电座。
Q:已连接但无心率/步数回调?
A:确认已先 onHeartRateChange / onStepsChange,再调用测量或查询接口。
Q:微信端报找不到插件?
A:确认 manifest.json 已配置 plugins,且小程序 AppID 已通过厂商插件授权。
Q:Vite 报 Unexpected "�"?
A:不要直接引用加密 .uts,请从 @/uni_modules/ajun-manridy-sdk(根目录明文 index.js)引入。
Q:云打包后崩溃 / 找不到类?
A:确认发行包已配置 ProGuard keep;确认插件 libs 内 AAR 已随插件提交。
兼容性
| 项目 | 要求 |
|---|---|
| HBuilderX | 3.6.8+ |
| Android minSdk | 21+ |
| iOS | 12.0+ |
| 微信小程序基础库 | 建议 2.27.3+ |
| uni-app | Vue3 |
反馈
使用中如遇问题,请提供:系统版本、机型、戒指型号/固件版本、复现步骤与日志,便于排查。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 6
赞赏 0
下载 12654275
赞赏 1954
赞赏
京公网安备:11010802035340号