[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寸彩屏自定义部分表盘。