[TOC] # 开发指南 ## 1 环境配置 ###1.1 添加AAR包 将 crpblelib-*.aar 复制到工程的libs目录下。如果有老版本 aar 包在其中,请删除。 ### 1.2 声明权限 在AndroidManifest.xml中配置权限 ```xml ``` ###1.3 声明组件 请在 application 标签中声明如下组件 ```xml ``` ### 1.4 代码混淆 在生成 apk 进行代码混淆时进行如下配置 ``` -keep class com.crrepa.ble.** { *; } ``` ## 2 使用 ###2.1 初始化 CRPBleClient 是 SDK 的入口, 客户端需要维护 CRPBleClient 的实例,建议在 Application.onCreate() 中初始化 CRPBleClient。 ```java CRPBleClient bleClient = CRPBleClient.create(context); ``` ###2.2 扫描手环 **扫描手环** 在权限允许和蓝牙开启状态下,才能开始正常扫描。在扫描过程中发现手环时,通过CRPScanCallback.onScanning() 回调。扫描结束后,通过 CRPScanCallback.onScanComplete() 回调扫描过程中发现的所有手环。可设置扫描时长,单位为毫秒,因蓝牙扫描操作是费时操作,建议扫描时长为 10 秒。 ```java bleClient.scanDevice(scanCallback, 10000); ``` **取消扫描** 在扫描过程中停止扫描,取消扫描也会触发 CRPScanCallback.onScanComplete()。 ```java bleClient.cancelScan(); ``` ###2.3 连接手环 通过扫描回调的 CRPScanDevice 获取到手环的 Mac Address。通过 CRPBleDevice.connect() 与手环建立连接,通过 CRPBleConnectionStateListener.onConnectionStateChange() 回调连接状态。建议在断开重连时,可以增加适当延时,以便系统回收资源,保证连接成功率。 ```java String address = CRPScanDevice.getDevice().getAddress(); CRPBleDevice bleDevice = bleClient.getBleDevice(address); CRPBleConnection bleConnection = bleDevice.connect(); bleConnection.setConnectionStateListener(bleConnectionStateListener); ``` ###2.4 设置时间 保持手环和手机的时间一致。 ```java bleConnection.syncTime(); ``` ###2.5 固件升级 1. **查询固件版本** 查询手环当前固件版本。 ``` bleConnection.queryFrimwareVersion(CRPDeviceFirmwareVersionCallback); ``` 2. **查询新固件** 新固件信息通过 CRPDeviceNewFirmwareVersionCallback.onNewFirmwareVersion() 回调。version 为当前固件版本。 ```java bleConnection.checkFirmwareVersion(CRPDeviceNewFirmwareVersionCallback, version, CRPFirmwareUpgradeType); ``` CRPFirmwareUpgradeType: | NORMAL_UPGEADE_TYPE | BETA_UPGRADE_TYPE | FORCED_UPDATE_TYPE | | ------------------------ | ---------------------------- | -------------------------------------------------- | | 正常升级。用于常规升级。 | BETA升级。用于内测版本升级。 | 强制升级。一般不使用,用于重大更新,强制用户升级。 | CRPFirmwareVersionInfo: | version | changeNotes | changeNotesEn | type | mcu | | ------------------ | ----------- | ------------- | ---------------------------------- | ------------------------- | | 手环当前固件版本号 | 更新日志 | 英语更新日志 | 升级方式,同CRPFirmwareUpgradeType | MCU类型,用于区分升级方式 | 3. **固件升级** 汉天下与Nordic固件升级方式不同,需要对不同mcu的手环使用对应的升级方式。 - Nordic 1. 开始固件升级升级 升级进度通过 CRPBleFirmwareUpgradeListener 回调。 ``` bleConnection.startFirmwareUpgrade(CRPBleFirmwareUpgradeListener); ``` 2. 停止升级 在升级成功或者失败后,可调用此接口退出固件升级流程。 ``` bleConnection.abortFirmwareUpgrade(); ``` 3. 查询手环DFU状态 查询手环是否处于DFU数据传输状态,在新版本固件中,手环在DFU过程中会多次重启,手环处于DFU状态时,避免向手环发送其它指令。结果通过CRPDeviceDfuStatusCallback.onDeviceDfuStatus()回调。 ``` bleConnection.queryDeviceDfuStatus(CRPDeviceDfuStatusCallback); ``` CRPDeviceDfuStatusCallback | DEVICE_STATUS_NORMAL | DEVICE_STATUS_DFU | | -------------------- | ----------------- | | 正常状态 | DFU状态 | - 汉天下 1. 查询手环固件升级模式的 Mac 地址 汉天下手环的升级模式和正常模式不同,拥有单独的广播的名字和 Mac 地址,Mac 地址通过 CRPDeviceDfuAddressCallback 回调。在升级之前需要查询手环固件升级模式的 Mac 地址,可保存此 Mac 地址,在升级失败后重新升级。 ```java bleConnection.queryHsDfuAddress(CRPDeviceDfuAddressCallback); ``` 2. 进入固件升级模式 手环进入固件升级模式后,会与正常模式断开蓝牙连接,在蓝牙连接断开后,发起固件升级。在手环进入固件升级模式后,不得再发起正常模式的蓝牙连接,会导致固件升级失败。 ```java bleConnection.enableHsDfu(); ``` 3. 开始固件升级 升级进度通过 CRPBleFirmwareUpgradeListener 回调。升级成功后,手环会重启回到正常模式;升级失败后,可重新开始固件升级。 ```java HsDfuController hsDfuController = new HsDfuController(); hsDfuController.setUpgradeListener(new CRPBleFirmwareUpgradeListener()); hsDfuController.setAddress(address); hsDfuController.start(); ``` 4. 停止升级 在升级成功或者失败后,可调用此接口退出固件升级流程。 ```java hsDfuController.abort(); ``` ###2.6 查询手环电量 1. 查询手环当前电量,当手环电量超过100时,表示手环正在充电。 ```java bleConnection.queryDeviceBattery(); ``` 2. 设置手环电量监听 ```java bleConnection.setDeviceBatteryListener(CRPDeviceBatteryListener); ``` ###2.7 用户信息 1. **设置用户信息** 向手环设置用户的个人信息。 ``` bleConnection.sendUserInfo(CRPUserInfo); ``` CRPUserInfo: | weight | height | gender | age | | -------------------- | ---------------------- | ------------------------ | ------------------------ | | 体重(用于计算卡路里) | 身高(用于计算活动距离) | 性别(用于测量血压或血氧) | 年龄(用于测量血压或血氧) | 2. **设置用户步长** 在手环固件1.6.6及以上版本,可以向手环设置步长,更加精准的计算活动数据。 ``` bleConnection.sendStepLength(length); ``` ###2.8 天气 1. **设置今日天气** 向手环设置今日天气。 ``` bleConnection.sendTodayWeather(CRPTodayWeatherInfo); ``` CRPTodayWeatherInfo: | city | lunar | festival | pm25 | temp | weatherId | | ------ | ------------ | -------- | ----- | -------- | --------- | | 城市名 | 农历节气节日 | 公历节日 | PM2.5 | 实时温度 | 天气状态 | CRPWeatherId: | CLOUDY | FOGGY | OVERCAST | RAINY | SNOWY | SUNNY | SANDSTORM | HAZE | | ------ | ----- | -------- | ----- | ----- | ----- | --------- | ---- | | 多云 | 雾 | 阴天 | 雨 | 雪 | 晴 | 沙尘暴 | 霾 | 2. **设置未来7日天气** 向手环设置未来7天天气。 ```java bleConnection.sendFutureWeather(CRPFutureWeatherInfo); ``` CRPFutureWeatherInfo.FutureBean: | weatherId | lowTemperature | highTemperature | | --------- | -------------- | --------------- | | 天气状态 | 最低温度 | 最高温度 | 3. **设置天气监听** 手环可以保存实时天气2个小时,2小时以后会清空天气信息。当手环无今日天气信息时,手环切换到天气界面时会通过 CRPWeatherChangeListener.onUpdateWeather() 请求重新设置天气。 ``` bleConnection.setWeatherChangeListener(CRPWeatherChangeListener); ``` ###2.9 活动步数 1. **设置活动相关监听** 所有活动相关的数据都会通过 CRPActionChangeListener 回调。 ``` bleConnection.setStepChangeListener(CRPActionChangeListener); ``` 2. **获取今日步数** 获取今日步数,结果通过 CRPActionChangeListener.onStepChange() 回调。 ```java bleConnection.syncStep(); ``` CRPActionInfo: | steps | distance | calories | | ----- | ---------------- | -------------------- | | 步数 | 距离(单位:米) | 卡路里(单位:千卡) | 3. **获取历史步数** 手环可以保存最近三天的活动步数数据,可以查询指定某天的活动步数数据。结果通过CRPActionChangeListener.onPastStepChange() 回调。 ``` bleConnection.syncPastStep(CRPPastTimeType); ``` CRPPastTimeType: | YESTERDAY_STEPS | DAY_BEFORE_YESTERDAY_STEPS | | --------------- | -------------------------- | | 昨天活动步数 | 前天活动步数 | 4. **设置步数统计数据监听** 步数统计数据会通过CRPStepsCategoryChangeListener回调。 ``` bleConnection.setStepsCategoryListener(CRPStepsCategoryChangeListener); ``` 5. **获取步数统计数据** 部分手环支持最近两天步数半小时分类统计。结果通过CRPStepsCategoryChangeListener.onStepsCategoryChange()回调。 ``` bleConnection.queryStepsCategory(CRPStepsCategoryDateType); ``` ###2.10 睡眠 1. **设置睡眠监听** 所有睡眠相关的数据都会通过 CRPSleepChangeListener 回调。 ``` bleConnection.setSleepChangeListener(CRPSleepChangeListener); ``` 2. **获取今日睡眠** 获取今日睡眠数据,结果通过 CRPSleepChangeListener.onSleepChange() 回调。手环睡眠清空时间为晚上8点,手环记录入睡时间段为晚上8点至第二天上午10点。 ``` bleConnection.syncSleep(); ``` CRPSleepInfo: | totalTime | restfulTime | lightTime | soberTime | SLEEP_STATE_RESTFUL | SLEEP_STATE_LIGHT | SLEEP_STATE_SOBER | | ---------- | ----------- | ---------- | --------- | ------------------- | ----------------- | ----------------- | | 总睡眠时间 | 深睡眠时间 | 浅睡眠时间 | 清醒时间 | 深睡眠状态 | 浅睡眠状态 | 清醒状态 | CRPSleepInfo.DetailBean: | startTime | endTime | totalTime | type | | --------- | -------- | --------- | -------- | | 开始时间 | 结束时间 | 总时间 | 睡眠类型 | 3. **获取历史睡眠数据** 手环可以保存最近三天的睡眠数据,可以查询指定某天的睡眠数据。结果通过CRPSleepChangeListener.onPastSleepChange() 回调。 ``` bleConnection.syncPastSleep(CRPPastTimeType); ``` CRPPastTimeType: | YESTERDAY_SLEEP | DAY_BEFORE_YESTERDAY_SLEEP | | --------------- | -------------------------- | | 昨天睡眠 | 前天睡眠 | ###2.11 时间制式 1. **设置时间制式** 手环支持12小时制和24小时制。 ``` bleConnection.sendTimeSystem(CRPTimeSystemType); ``` CRPTimeSystemType: | TIME_SYSTEM_12 | TIME_SYSTEM_24 | | -------------- | -------------- | | 12小时制 | 24小时制 | 2. **获取时间制式** 查询手环正在使用的时间制式,结果通过CRPDeviceTimeSystemCallback.onTimeSystem()回调。 ``` bleConnection.queryTimeSystem(CRPDeviceTimeSystemCallback); ``` ###2.12 翻腕亮屏 1. **设置翻腕亮屏状态** 开启或关闭手环翻腕亮屏功能。 ``` bleConnection.sendQuickView(state); ``` 2. **获取翻腕亮屏状态** 结果通过CRPDeviceQuickViewCallback.onQuickView()回调。 ``` bleConnection.queryQuickView(CRPDeviceQuickViewCallback); ``` 3. **设置翻腕亮屏有效时段** 手环支持翻腕亮屏有效时段,翻腕亮屏有效时段内翻腕亮屏才有效。 ``` bleConnection.sendQuickViewTime(CRPPeriodTimeInfo); ``` 4. **获取翻腕亮屏有效时段** 查询手环设置的翻腕亮屏有效时段。结果通过CRPDevicePeriodTimeCallback.onPeriodTime()回调。 ``` bleConnection.queryQuickViewTime(CRPDevicePeriodTimeCallback ); ``` ###2.13 目标步数 1. **设置目标步数** 向手环推送用户的目标步数,当天活动步数达到目标步数时,手环会有目标达成提醒。 ``` bleConnection.sendGoalSteps(steps) ``` 2. **获取目标步数** 查询手环的目标步数,结果通过CRPDeviceGoalStepCallback.onGoalStep()回调。 ``` bleConnection.queryGoalStep(CRPDeviceGoalStepCallback); ``` ###2.14 表盘 1. **切换表盘** 手环支持三个不同的表盘,可以自由切换。 ``` bleConnection.sendWatchFaces(CRPWatchFacesType); ``` CRPWatchFacesType: | CLASSIC_PORTAIT | MODEN_PORTAIT | CLASSIC_LANDSCAPE | | --------------- | ------------- | ----------------- | | 第一个表盘 | 第二个表盘 | 第三个表盘 | 2. **获取表盘** 查询手环正在使用的表盘序号,结果通过CRPDeviceWatchFacesCallback.onWatchFaces()回调。 ``` bleConnection.queryWatchFaces(CRPDeviceWatchFacesCallback); ``` 3. **更换表盘背景图片** 部分1.3寸彩屏的表盘支持更换背景图片,图片尺寸为240 * 240 px。compressed 表示图片是否需要压缩(主控为52840的手环不支持压缩,固定为false);timeout 表示超时时间,单位为秒。进度通过CRPWatchFaceSwitchListener回调。 ``` bleConnection.switchWatchFaceBackground(Bitmap, compressed, timeout, CRPWatchFaceSwitchListener); ``` 4. **修改表盘布局** 部分1.3寸彩屏的表盘支持修改表盘布局。 ``` bleConnection.sendWatchFaceLayout(CRPWatchFaceLayoutInfo); ``` CRPWatchFaceLayoutInfo: | timePosition | timeTopContent | timeBottomContent | textColor | backgroundPictureMd5 | | ------------ | ---------------- | ----------------- | --------- | ---------------------------------------------------------- | | 时间位置 | 时间上方显示内容 | 时间下方显示内容 | 字体颜色 | 背景图片MD5,长度为32位,用0填充时,背景图片恢复默认背景。 | CRPWatchFaceLayoutType: | WATCH_FACE_TIME_TOP | 时间位于右上方 | | ----------------------------- | -------------------- | | WATCH_FACE_TIME_BOTTOM | 时间位于右下方 | | WATCH_FACE_CONTENT_CLOSE | 关闭,不显示任何内容 | | WATCH_FACE_CONTENT_DATE | 日期 | | WATCH_FACE_CONTENT_SLEEP | 睡眠 | | WATCH_FACE_CONTENT_HEART_RATE | 心率 | | WATCH_FACE_CONTENT_STEP | 活动步数 | 5. **获取表盘布局** 查询手环表盘布局信息,结果通过CRPDeviceWatchFaceLayoutCallback.onWatchFaceLayoutChange()回调。 ``` bleConnection.queryWatchFaceLayout(CRPDeviceWatchFaceLayoutCallback); ``` 6. **获取支持表盘类型** 部分手环新增一个表盘位,查询支持的表盘类型。结果通过CRPDeviceSupportWatchFaceCallback.onSupportWatchFace() 回调。 ```java bleConnection.querySupportWatchFace(CRPDeviceSupportWatchFaceCallback); ``` 7. **获取表盘市场** 根据手环支持的表盘类型,获取手环可以更换的表盘列表。结果通过CRPDeviceWatchFaceStoreCallback.onWatchFaceStoreChange() 回调。 ``` bleConnection.queryWatchFaceStore(List, CRPDeviceWatchFaceStoreCallback); ``` 8. **获取表盘ID的表盘信息** 获取表盘ID的表盘信息,结果通过 CRPDeviceWatchFaceCallback.onWatchFaceChange() 回调。 ```java bleConnection.queryWatchFaceOfID(id, CRPDeviceWatchFaceCallback); ``` 9. **发送表盘文件** 向手环发送新表盘位的表盘文件,期间手环会重启。传输进度通过CRPWatchFaceTransListener回调。 ``` bleConnection.sendWatchFace(CRPCustomizeWatchFaceInfo, CRPWatchFaceTransListener); ``` ### 2.15 闹钟 1. **设置闹钟** 手环支持三个闹钟,可以根据闹钟序号分别设置闹钟信息。单次闹钟支持设置日期。 ``` bleConnection.sendAlarmClock(CRPAlarmClockInfo) ``` CRPAlarmClockInfo: | id | hour | minute | repeatMode | enable | | -------- | -------------------------- | -------------- | ---------- | ------ | | 闹钟序号 | 闹钟时间小时数(24小时制) | 闹钟时间分钟数 | 重复模式 | 开关 | 闹钟序号: | FIRST_CLOCK | SECOND_CLOCK | THIRD_CLOCK | | ----------- | ------------ | ----------- | | 第一个闹钟 | 第二个闹钟 | 第三个闹钟 | 重复模式: | SINGLE | SUNDAY | MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | EVERYDAY | | ------------------ | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | -------- | | 单次,仅今日生效。 | 星期日重复 | 星期一重复 | 星期二重复 | 星期三重复 | 星期四重复 | 星期五重复 | 星期六重复 | 每天重复 | 2. **获取闹钟** 查询手环保存的所以闹钟信息,结果通过CRPDeviceAlarmClockCallback.onAlarmClock()回调。 ``` bleConnection.queryAllAlarmClock(CRPDeviceAlarmClockCallback); ``` ###2.16 手环版本 1. **设置手环版本** 手环分为中文版和国际版,中文版仅支持简体中文,国际版支持多国语言及繁体。 ``` bleConnection.sendDeviceVersion(CRPDeviceVersionType); ``` CRPDeviceVersionType: | CHINESE_EDITION | INTERNATIONAL_EDITION | | --------------- | --------------------- | | 中文版 | 国际版 | 2. **获取手环版本** 查询手环正在使用的版本,结果通过 CRPDeviceVersionCallback.onDeviceVersion() 回调。 ``` bleConnection.queryDeviceVersion.(CRPDeviceVersionCallback); ``` ###2.17 手环语言 1. **设置手环语言** 设置手环的语言。 ``` bleConnection.sendDeviceLanguage(CRPDeviceLanguageType); ``` CRPDeviceLanguageType: | LANGUAGE_ENGLISH | LANGUAGE_CHINESE | LANGUAGE_JAPANESE | LANGUAGE_KOREAN | LANGUAGE_GERMAN | LANGUAGE_FRENCH | LANGUAGE_SPANISH | LANGUAGE_ARABIC | LANGUAGE_RUSSIAN | LANGUAGE_TRADITIONAL | LANGUAGE_UKRAINIAN | LANGUAGE_ITALIAN | LANGUAGE_PORTUGUESE | | ---------------- | ---------------- | ----------------- | --------------- | --------------- | --------------- | ---------------- | --------------- | ---------------- | -------------------- | ------------------ | ---------------- | ------------------- | | 英语 | 中文简体 | 日语 | 韩语 | 德语 | 法语 | 西班牙语 | 阿拉伯语 | 俄语 | 中文繁体 | 乌克兰语 | 意大利语 | 葡萄牙语 | 注意:意大利语和葡萄牙语仅支持手环固件1.7.1及以上版本。 2. **获取手环语言** 查询手环正在使用的语言及手环支持的语言列表,结果通过 CRPDeviceLanguageCallback.onDeviceLanguage() 回调。 ```java bleConnection.queryDeviceLanguage(CRPDeviceLanguageCallback); ``` ### 2.18 消息推送 1. **设置其它消息推送状态** 开启或者关闭其它消息推送。 ``` bleConnection.sendOtherMessageState(state); ``` 2. **获取其它消息推送状态** 查询其它消息推送状态,结果通过CRPDeviceOtherMessageCallback.onOtherMessage()回调。 ``` bleConnection.queryOtherMessageState(CRPDeviceOtherMessageCallback); ``` 3. **推送消息** 向手环推送各种类型的消息内容。 ``` bleConnection.sendMessage(CRPMessageInfo); ``` CRPMessageInfo: | message | type | versionCode | isHs | isSmallScreen | | -------- | ----------------------------- | ------------------------------------------ | -------------------------------------- | ------------------- | | 消息内容 | 消息类型(CRPBleMessageType) | 固件版本号(比如:MOY-AA2-1.7.6,就是176) | MCU是否为汉天下,可向我们确认MCU类型。 | 手环屏幕是否小于1寸 | CRPBleMessageType: | MESSAGE_PHONE | 电话 | | ----------------- | -------------- | | MESSAGE_SMS | 短信 | | MESSAGE_WECHAT | 微信(中文版) | | MESSAGE_QQ | QQ | | MESSAGE_FACEBOOK | FACEBOOK | | MESSAGE_TWITTER | TWITTER | | MESSAGE_WHATSAPP | WHATSAPP | | MESSAGE_WECHAT_IN | 微信(国际版) | | MESSAGE_INSTAGREM | INSTAGREM | | MESSAGE_SKYPE | SKYPE | | MESSAGE_KAKAOTALK | KAKAOTALK | | MESSAGE_LINE | LINE | | MESSAGE_OTHER | 其它消息类型 | 4. **挂断电话** 手环在收到电话类型消息推送时,手环会震动固定时间。在手环接通或者挂断电话时,调用此接口停止手环震动。 ``` bleConnection.sendCall0ffHook(); ``` ###2.19 久坐提醒 1. **设置久坐提醒状态** 开启或者关闭久坐提醒。 ``` bleConnection.sendSedentaryReminder(state); ``` 2. **获取久坐提醒状态** 查询久坐提醒状态,结果通过CRPDeviceSedentaryReminderCallback.onSedentaryReminder()回调。 ```java bleConnection.querySedentaryReminder(CRPDeviceSedentaryReminderCallback); ``` 3. **设置久坐提醒时段** 设置久坐提醒的有效时段。 ```java bleConnection.sendSedentaryReminderPeriod(CRPSedentaryReminderPeriodInfo); ``` CRPRemindersToMovePeriodInfo: | period | steps | startHour | endHour | | ------------------------ | -------- | ------------------ | ------------------ | | 久坐提醒周期(单位:分钟) | 最大步数 | 开始时间(24小时制) | 结束时间(24小时制) | 4. **获取久坐提醒时段** 查询手环久坐提醒有效时段,结果通过CRPDeviceRemindersToMovePeriodCallback.onRemindersToMovePeriod()回调。 ```java bleConnection.querySedentaryReminderPeriod(CRPDeviceSedentaryReminderPeriodCallback); ``` ###2.20 查找手环 查找手环,手环收到此指令以后会震动几秒。 ``` bleConnection.findDevice(); ``` ### 2.21 心率 1. **设置心率数据监听** 所有心率相关的数据都会通过CRPHeartRateChangeListener回调。 ``` bleConnection.setHeartRateChangeListener(CRPHeartRateChangeListener); ``` 2. **开始动态心率测量** 开始动态心率测量,测量过程中通过CRPHeartRateChangeListener.onMeasuring()回调实时心率。 ``` bleConnection.startMeasureDynamicRate(); ``` 3. **停止动态心率测量** 停止动态心率测量,测量结果通过CRPHeartRateChangeListener.onMeasureComplete()回调。 ``` bleConnection.stopMeasureDynamicRtae(); ``` CRPHeartRateInfo: | startMeasureTime | measureData | timeInterval | heartRateType | | -------------------- | ------------------------------------------------- | ---------------------------------- | ------------- | | 开始时间(单位毫秒) | 心率测量结果,单个数据表示测量间隔内的平均2心率。 | 心率测量数据的时间间隔(单位分钟) | 心率数据类型 | HeartRateType: | PART_HEART_RATE | TODAY_HEART_RATE | YESTERDAY_HEART_RATE | | --------------- | ---------------- | -------------------- | | 动态心率 | 今日心率 | 昨天心率 | 4. **查询上次动态心率测量结果** 在未连接状态下测量动态心率,手环可以保存最后一次的测量结果。结果通过CRPHeartRateChangeListener.onMeasureComplete()回调。 ``` bleConnection.queryLastDynamicRate(); ``` 5. **开启定时测量心率** 手环支持24小时定时测量心率,从0点0分开始测量,可以设置测量时间间隔,时间间隔为5分钟的倍数。 ``` bleConnection.openTimingMeasureHeartRate(interval); ``` 6. **关闭定时测量心率** 关闭定时测量心率。 ``` bleConnection.closeTimingMeasureHeartRate(); ``` 7. **查询定时测量心率状态** 查询定时测量心率开启状态,结果通过CRPDeviceTimingMeasureHeartRateCallback.onTimingMeasure()回调。 ```java bleConnection.queryTimingMeasureHeartRateState(CRPDeviceTimingMeasureHeartRateCallback); ``` 8. **查询今日心率测量数据** 今日心率测量分为两种,根据对应手环支持的测量方式获取。结果通过CRPHeartRateChangeListener.on24HourMeasureResult()回调。 ``` bleConnection.queryTodayHeartRate(CRPHeartRateType); ``` CRPHeartRateType: | TIMING_MEASURE_HEART_RATE | ALL_DAY_HEART_RATE | | ------------------------- | ------------------ | | 定时心率测量 | 24小时持续测量 | 9. **查询历史心率测量数据** 查询前一天的心率数据,结果通过CRPHeartRateChangeListener.on24HourMeasureResult()回调。 ``` bleConnection.queryPastHeartRate() ``` 10. **获取运动数据** 部分手环支持多种运动模式的心率测量,测量结果包括心率和卡路里等其它运动相关数据,此接口用于获取卡路里等数据。手环可以保存最近三次的运动数据。支持24小时持续测量的手环,运动心率可以根据运动起至时间从24小时心率数据中获取;其它手环运动心率和动态心率获取方式一致。 ``` bleConnection.queryMovementHeartRate(); ``` CRPMovementHeartRateInfo: | type | startTime | endTime | validTime | steps | distance | calories | | -------- | ---------------------- | ---------------------- | ------------------------ | -------------------------- | ------------------------------ | -------- | | 运动模式 | 开始时间(单位:毫秒) | 结束时间(单位:毫秒) | 运动有效时长(单位:秒) | 步数(部分运动模式不支持) | 活动距离(部分运动模式不支持) | 卡路里 | 运动模式: | WALK_TYPE | RUN_TYPE | BIKING_TYPE | ROPE_TYPE | BADMINTON_TYPE | BASKETBALL_TYPE | FOOTBALL_TYPE | SWIM_TYPE | | --------- | -------- | ----------- | --------- | -------------- | --------------- | ------------- | --------- | | 散步 | 跑步 | 自行车 | 跳绳 | 羽毛球 | 篮球 | 足球 | 游泳 | 11. **测量单次心率** 开始测量单次心率,结果通过CRPHeartRateChangeListener.onOnceMeasureComplete()回调。 ``` bleConnection.startMeasureOnceHeartRate(); ``` 12. **结束单次心率** 结束单次测量。测量时间过短,会导致无测量数据。 ``` bleConnection.stopMeasureOnceHeartRate(); ``` ### 2.22 血压 1. **设置血压数据监听** 所有血压相关的数据都会通过CRPBloodPressureChangeListener回调。 ``` bleConnection.setBloodPressureChangeListener(CRPBloodPressureChangeListener); ``` 2. **开始测量血压** 开始测量血压。 ``` bleConnection.startMeasureBloodPressure(); ``` 3. **停止测量血压** 停止测量血压,测量时间过短会导致无测量结果。测量结果通过CRPBloodPressureChangeListener.onBloodPressureChange()回调。 ``` bleConnection.stopMeasureBloodPressure(); ``` ###2.23 血氧 1. **设置血氧数据监听** 所有血氧相关的数据都会通过CRPBloodOxygenChangeListener回调。 ``` bleConnection.setBloodOxygenChangeListener(CRPBloodOxygenChangeListener); ``` 2. **开始测量血氧** 开始测量血氧。 ``` bleConnection.startMeasureBloodOxygen(); ``` 3. **停止测量血氧** 停止测量血氧,测量时间过短会导致无测量结果。结果通过CRPBloodOxygenChangeListener.onBloodOxygenChange()回调。 ``` bleConnection.stopMeasureBloodOxygen(); ``` ###2.24 校准GSensor 手环出现翻腕亮屏不灵敏或者计步不准,可校准GSensor以修复,校准过程中,手环水平置于桌面。 ``` bleConnection.sendGsensorCalibration(); ``` ###2.25 拍照 1. **切换拍照界面** 手环切换至拍照界面。 ``` bleConnection.switchCameraView(); ``` 2. **设置拍照监听** 长按手环拍照界面,可以触发手环的拍照指令,通过CRPCameraOperationListener.onTakePhoto()回调。 ``` bleConnection.setCameraOperationListener(CRPCameraOperationListener); ``` ###2.26 手机相关操作 手环可以发出音乐控制和挂断电话等指令,通过CRPPhoneOperationListener.onOperationChange()回调。 ``` bleConnection.setPhoneOperationListener(CRPPhoneOperationListener); ``` CRPPhoneOperationType: | MUSIC_PLAY_OR_PAUSE | MUSIC_PREVIOUS | MUSIC_NEXT | REJECT_INCOMING |ACCEPT_RINGING_CALL| VOLUME_UP | VOLUME_DOWN | MUSIC_PLAY | MUSIC_PAUSE | | ------------------- | -------------- | ---------- | -----------| ------------- |--------- | ----------- | ---------- | ----------- | | 播放/暂停 | 上一曲 | 下一曲 | 挂断电话 | 接听电话 |调大音量 | 降低音量 | 播放 | 暂停 | ###2.27 手环RSSI 1. **设置RSSI监听** 读取手环RSSI,结果通过CRPDeviceRssiListener.onDeviceRssi()回调。 ``` bleConnection.setDeviceRssiListener(CRPDeviceRssiListener); ``` 2. **读取手环RSSI** 读取手环实时的RSSI值。 ``` bleConnection.readDeviceRssi(); ``` ###2.28 关机 手环关机。 ``` bleConnection.shutDown(); ``` ### 2.29 勿扰时段 1. **设置勿扰时段** 手环支持勿扰时段,勿扰时段内不显示消息推送和久坐提醒。 ``` bleConnection.sendDoNotDistrubTime(CRPPeriodTimeInfo); ``` CRPPeriodTimeInfo: | startHour | startMinute | endHour | endMinute | | -------------------------- | -------------- | -------------------------- | -------------- | | 开始时间小时数(24小时制) | 开始时间分钟数 | 结束时间小时数(24小时制) | 结束时间分钟数 | 2. **获取勿扰时段** 查询手环设置的勿扰时段。结果通过CRPDevicePeriodTimeCallback.onPeriodTime()回调。 ``` bleConnection.queryDoNotDistrubTime(CRPDevicePeriodTimeCallback); ``` CRPDevicePeriodTimeCallback: | DO_NOT_DISTRUB_TYPE | QUICK_VIEW_TYPE | | ------------------- | ---------------- | | 勿扰时段 | 翻腕亮屏有效时段 | ###2.30 呼吸灯 1. **设置呼吸灯状态** 部分手环支持呼吸灯,开启或者关闭呼吸灯。 ``` bleConnection.sendBreathingLight(enable); ``` 2. **查询呼吸灯状态** 查询手环呼吸灯开启状态。结果通过CRPDeviceBreathingLightCallback.onBreathingLight()回调。 ``` bleConnection.queryBreathingLight(CRPDeviceBreathingLightCallback); ``` ### 2.31 心电 1. **设置心电数据监听** 所有心电相关的数据都会通过CRPBleECGChangeListener回调。 ```java bleConnection.setECGChangeListener(CRPBleECGChangeListener); ``` 2. **开始测量心电** 开始测量心电。心电测量时间为30S,期间需要用户双手接触手环的左右电极。期间会通过CRPBleECGChangeListener.onECGChange() 回调心电测量数据。 ```java bleConnection.startECGMeasure(); ``` 3. **停止测量心电** 用于心电测量期间主动停止心电测量。 ```java bleConnection.stopECGMeasure(); ``` 4. **** **检测是否为新的心电测量方式** 新的测量方式,手环可以保存最后一次未发送的测量结果;老版本则不能。 ```java boolean newMeasurementVersion = bleConnection.isNewECGMeasurementVersion(); ``` 5. **查询上次心电数据** 查询手环保存的心电数据,结果通过 CRPBleECGChangeListener.onECGChange() 回调。 ```java bleConnection.queryLastMeasureECGData(); ``` 6. **设置心电测量期间心率** 用测量所得到的数据,通过心电算法库计算出瞬时心率,发送至手环。 ```java bleConnection.sendECGHeartRate(heartRate); ``` ### 2.32 生理周期 1. 设置生理周期提醒 部分手环支持女性生理周期提醒,设置或关闭生理周期提醒。 ```java bleConnection.sendPhysiologcalPeriod(CRPPhysiologcalPeriodInfo); ``` CRPPhysiologcalPeriodInfo: | physiologcalPeriod | menstrualPeriod | startDate | menstrualReminder | ovulationReminder | ovulationDayReminder | ovulationEndReminder | reminderHour | reminderMinute | | ------------------ | ------------------ | -------------------- | ---------------------------- | ---------------------------- | ---------------------------- | ------------------------------------ | ------------------------ | -------------- | | 生理周期(单位:天) | 经期周期(单位:天) | 本次生理周期开始日期 | 经期开始提醒(经期前一天提醒) | 排卵期提醒(排卵期前一天提醒) | 排卵日提醒(排卵日前一天提醒) | 排卵期结束提醒(排卵日结束前一天提醒) | 提醒时间(小时,24小时制) | 提醒时间(分钟 | 2. 查询生理周期提醒 查询手环已保存的生理周期提醒信息。结果通过CRPDevicePhysiologcalPeriodCallback回调。 ```java bleConnection.queryPhysiologcalPeriod(CRPDevicePhysiologcalPeriodCallback); ``` ### 2.33 音乐播放器 1. 设置音乐播放器播放状态 部分手环支持音乐播放器状态与连接手机保持一致。设置音乐播放器播放状态。手环操作音乐播放器状态回调可见 2.26。 ```java // state 可见 2.26 CRPPhoneOperationType.MUSIC_PLAY 或者 CRPPhoneOperationType.MUSIC_PAUSE bleConnection.setMusicPlayerState(byte state); ``` 2. 设置当前播放歌曲名字 向手环发送手机当前正在播放的歌曲的名字。 ```java bleConnection.sendSongTitle(String title); ``` 3. 设置歌词 ``` bleConnection.sendLyrics(lyrics); ``` ### 2.34 语言助手 1. 激活语言助手 通过手环激活手机语言助手。通过CRPVoiceAssistantListener.onAwake()回调。 ```java bleConnection.setVoiceAssistantListener(CRPVoiceAssistantListener listener); ``` ### 2.35 音乐频道 1. 切换音乐频道 通过手环切换APP的音乐频道。通过CRPMusicChannelListener()回调。 CRPMusicChannelListener.MusicChannelKey: | PREVIOUS | NEXT | | ---------- | ---------- | | 上一个频道 | 下一个频道 | ```java bleConnection.setMusicChannelListener(CRPMusicChannelListener listener); ``` 2. 设置频道名 ``` bleConnection.sendChannelName(name); ``` ### 2.36 电话 1. 一键求救 设置此监听后,手环触发一键求救时回调CRPBleCallPhoneListener.onCallPhone()。 ```java bleConnection.setCallPhoneListener(CRPBleCallPhoneListener); ``` 2. 设置通话状态 当手机通话状态发送改变时,及时推送至手环。 ``` bleConnection.sendCallState(CRPCallState); ``` ###2.37 纪念日 1. 设置纪念日 ```java bleConnection.sendMemorialDay(CRPMemorialDayInfo); ``` CRPMemorialDayInfo: | year | month | day | week | hour | minute | | -------------- | ----- | ---- | ---------------------------------- | ---- | ------ | | 年份,比如2020 | 月份 | 日 | 周几,周日为0,周一为1,以此类推。 | 小时 | 分钟 | 2. 查询纪念日 结果通过CRPMemorialDayCallback.onMemorialDay()回调。 ``` bleConnection.queryMemorialDay(CRPMemorialDayCallback); ``` ### 2.38 喝水提醒 1. 开启喝水提醒 设置喝水提醒的开始时间等信息。 ```java bleConnection.enableDrinkWaterReminder(CRPDrinkWaterPeriodInfo); ``` CRPDrinkWaterPeriodInfo: | enable | startHour | startMinute | count | period | currentCups | | -------- | ------------ | ------------ | -------- | ------ | ------------ | | 是否开启 | 开始时间小时 | 开始时间分钟 | 提醒次数 | 间隔 | 当前已喝杯数 | 2. 关闭喝水提醒 关闭喝水提醒。 ``` bleConnection.disableDrinkWaterReminder(); ``` 3. 查询喝水提醒 查询手环当前喝水提醒信息。结果通过CRPDeviceDrinkWaterPeriodCallback.onDrinkWaterPeriod(CRPDrinkWaterPeriodInfo)回调。 ``` bleConnection.queryDrinkWaterReminderPeriod(CRPDeviceDrinkWaterPeriodCallback); ``` ### 3.01 常亮 ``` void sendAlwaysOnDisplay(boolean enable); void queryAlwaysOnDisplay(CRPDeviceAlwaysOnDisplayCallback callback); ``` ### 3.02 震动 ``` void sendVibrationState(boolean enable); void queryVibrationState(CRPDeviceVibrationStateCallback callback); ``` ### 3.03 睡眠播放器 ``` void sendSleepPlayerState(boolean enable); void querySleepPlayerState(CRPDeviceSleepPlayerStateCallback callback); ``` ### 3.04 睡眠状态回调 ``` querySleepState(CRPDeviceSleepStateCallback callback); SLEEP_STATE_AWAKE = 0; SLEEP_STATE_LIGHT = 1; SLEEP_STATE_RESTFUL = 2; ``` ## 3 更新日志 ### 1.4.3 1. 修改设置和查询久坐提醒时段函数名 2. 修改消息推送函数参数 3. 手环新增充电状态 4. 增加喝水提醒 ### 1.4.2 1. 增加歌词推送 2. 增加一键求救及通话状态同步 3. 增加频道名推送 4. 增加纪念日 ### 1.4.0 1. 增加音乐播放器播放状态同步。 2. 增加激活语言助手。 3. 增加切换音乐频道。 ### 1.3.7 1. 增加生理周期相关接口。 2. 修改表盘序号的名字。 3. 修复偶尔主动断开连接后,蓝牙连接未断开。 4. 增加手环UI升级。 5. 修复手环升级过程中重启后,无法再次升级。 6. 手环连接成功后,重置消息队列。 7. 提升对手环数据的传输速度。 8. 增加表盘背景图片传输超时机制。 9. 修复推送内容为空格时异常。 ### 1.3.4 1. 增加表盘市场接口。 2. 增加步数统计接口。 ###1.3.3 1. 修复文件解压时,可能遭受路径遍历攻击。 ###1.3.2 1. 增加汉天下固件升级。 ###1.3.1 1. 取消消息队列大小限制。 2. 修改关机指令。 ###1.3.0 1. 增加传输全新表盘。 2. 增加登山、网球、橄榄球等运动模式。 ###1.2.10 1. 增加查询新版本手环固件支持语言列表。 ###1.2.9 1. 增加心电测量。 2. 增加多国语言切换。 ###1.2.8 1. 修复不同时区下心率时间异常。 ###1.2.7 1. 增加手环意大利语和葡萄牙语。 ###1.2.6 1. 增加查找手机。 ###1.2.5 1. 优化固件升级流程。 2. 增加英文固件升级日志。 ###1.2.4 1. 优化DFU升级速度。 2. 增加设置步长。 3. 增加手环是否处于DFU数据传输状态。 ###1.2.3 1. 单次闹钟可设置日期,其它类型闹钟不支持。 2. 增加1.3寸彩屏自定义部分表盘。