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