常见问题(Android)
1.SDK正确的使用方式
SDK采用单例模式,请使用 ICDeviceManager.shared()
获取实例
2.iOS SDK、Android SDK和小程序插件的使用方式有何不同
这三个SDK无论在命名还是设计模式上都是一样的,对外暴露的model、枚举、接口等都是一样的。如果开发过其中一端,在另一端开发能很快上手。多人开发中,如果其中一端遇到问题,也可以与另一端的人商议看看是否使用有错。
iOS/Android SDK 功能是最完整的。小程序插件功能相对做了点精简,主要缺少了ota以及算法,体脂数据通过web api请求得到。
3.是否支持Android X?
支持,SDK没有使用到UI相关的库
4.为什么需要定位权限?
这是Android官方的要求,不是沃莱的要求。Android 6.0及以上的系统版本才需要开启定位,记住是开启定位,而不是仅给权限就可以了,定位相关疑问请查阅Android官方: https://developer.android.com/guide/topics/connectivity/bluetooth
5.SDK在什么时候初始化?
建议在app启动的时候就初始化,sdk内的大部分接口在初始化回调 onInitFinish
后才能调用。sdk仅需在app生命周期内初始化一次。注意:在调用初始化接口前,请确保拥有蓝牙和定位权限,如无权限,则申请权限后再调用初始化接口。
6.SDK接口回调都在什么线程?
都在主线程回调
7.SDK初始化后,设备上的蓝牙符号也亮了,为什么没有数据上传?
请确认是否调用了 ICDeviceManager.shared().setDelegate()
设置delegate,所有的数据和状态都通过设置的delegate来进行回调。
8.SDK内的数据是否要经过沃莱服务器?
不会,SDK都是本地解析数据的,不会向沃莱服务器发送数据解析和保存。
9.SDK内部是否保存设备上传的数据?
不会,SDK仅是解析中转数据给app,不会在sdk内部保存,所以app接收到数据后需要自己保存。
10.调用SDK初始化接口后,为什么没有onInitFinish回调?
绝大多数都是因为没有在初始化前设置delegate.
11.调用addDevice添加设备,接口回调提示添加成功,为什么还是没有数据上来?
addDevice
回调的是接口操作代码,并非是连接成功的代码。SDK是支持多设备连接的,所有的设备状态都是通过 onDeviceConnectionChanged
回调。
12.调用addDevice添加设备,为什么接口回调提示ICAddDeviceCallBackCodeFailedAndExist?
这个代码的意思是设备已经添加过了,无需重复添加。如果确认这个设备是要sdk去连接的,收到这个代码后请不要调用 removeDevice
,否则会造成sdk不去连接这个设备。
13.调用addDevice添加设备后,在何时调用removeDevice?
addDevice添加设备成功后,SDK将会自行管理设备的连接,如设备息屏断开连接了,设备亮屏后,SDK会自动连接上设备。如果不需要SDK去连接设备,则调用 removeDevice
。注意:APP关闭后,SDK内的所有资源都会释放掉,所以重新打开app后需要重新addDevice才会去连接设备。
14.调用scanDevice后,中途关闭蓝牙后再打开蓝牙没有扫描设备回调
因为蓝牙的关闭和打开都是用户手动操作,如果用户在扫描中关闭蓝牙,说明用户不想去扫描了,所以SDK没有去自动扫描。如需求是想在蓝牙打开后继续扫描,可以在 onBleState
回调蓝牙打开状态后,调用 scanDevice
。
15.调用scanDevice后,何时调用stopScan?
在不需要扫描设备的时候,调用stopScan。调用 scanDevice
后,如不调用 stopScan
,SDK不会停止扫描。
16.updateUserInfo什么时候调用?
用户信息有更新就调用该方法。因为设备在连接上后,SDK会自动下发用户信息。
17.秤上的st单位是什么意思?
秤单位st是一个组合单位,如 190.5lb
,秤上单位是st时,秤显示的是 13:8.5
,换算方式是整数部分: 190.5 / 14 = 13.6 = 13
,小数部分: 190.5 – 13 * 14 = 8.5
18.onReceiveWeightData和onReceiveMeasureStepData有什么区别?
onReceiveWeightData
是以前旧的设备上传数据的接口, data内的属性 isStabilized
为 true
时,表示测量结束
onReceiveMeasureStepData
是新的设备上传数据的接口,收到step为 ICMeasureStepMeasureOver
为测量结束
19.历史数据何时回调?
非所有设备都有历史数据,具体哪些设备有历史数据功能,需跟业务确认。对于大部分秤,历史数据大多在一次体重测量完成后上报数据。对于跳绳,历史数据在连接上后就会上报,如有实时数据产生,历史数据上传将会停止。待无实时数据产生后又将继续上传历史数据。
20.跳绳电量是否支持主动读取?
目前不支持主动读取,跳绳的电量目前的做法是每次都随实时数据上传,电量更新也会比主动读取更加及时。
21.setUserList和updateUserInfo的区别
updateUserInfo
表示当前用户的信息
setUserList
表示用户列表,下发给设备在离线时做用户识别用。
22.setUserList最多支持多少个用户?
最多支持8个,请确保weight有值,否则在离线时设备无法识别用户。识别逻辑:在用户列表中有且仅有一个用户体重与当前测量的体重在正负2kg以内的为同一个用户。
23.SDK是否支持OTA?
SDK有OTA的功能,但是不是所有设备都支持ota。升级接口 upgradeDevice
24.upgradeDevice调用后,超时时间是多久?
SDK目前没做超时限制,SDK的逻辑是避免出现问题,会一直尝试让设备ota成功。所以app可以根据设备正常的ota所需时间来定义OTA结束的超时时间。
25.upgradeDevice调用后,设备已在升级中,用户关掉蓝牙后再打开蓝牙,SDK没有继续升级.
SDK逻辑:如设备在升级中,但是用户确关闭蓝牙,这说明用户不想升级下去,SDK不会继续去升级。如果APP想继续升级,可以重新调用 upgradeDevice
。
26.为什么onReceiveWeightHistoryData回调的历史数据没有体脂信息?
因为秤上传的是体重和阻抗数据,而体脂数据跟用户信息相关。所以SDK把数据给到APP,APP根据自己的逻辑去对数据进行认领。认领后可以调用 getBodyFatAlgorithmsManager
里的 reCalcBodyFatWithWeightData
进行体脂数据计算。
27.reCalcBodyFatWithWeightData里面的信息哪些是要填的?
对于4电极单频:
- weightData:要赋值 weight_kg、imp、bfa_type、electrode
- userInfo:要赋值 height、age、sex、peopleType
对于4电极双频:
- weightData:要赋值 weight_kg、imp、imp2、bfa_type、electrode
- userInfo:要赋值 height、age、sex、peopleType
对于8电极单频:
- weightData:要赋值 weight_kg、imp、imp2、imp3、imp4、imp5、bfa_type、electrode
- userInfo:要赋值 height、age、sex、peopleType
对于8电极双频:
- weightData:要赋值 weight_kg、impendences、bfa_type、electrode
- userInfo:要赋值 height、age、sex、peopleType
通用:
- weightData:要赋值 weight_kg、impendences、bfa_type、electrode
- userInfo:要赋值 height、age、sex、peopleType
28.BLE+WIFI设备的数据上传逻辑是怎样的?
如BLE连接上了,数据将从蓝牙发送,不会从WIFI发送。如果BLE没连接上,数据将从WIFI上传.
29.广播设备是否支持切换单位和下发用户信息?
目前的大部分广播设备只支持数据上报,不支持下发。
30.跳绳停止后,为什么热量消耗还是会变化?
热量消耗的计算原理是把跳绳的时长与体重经过算法运算得到。目前虽然跳绳停止了,但是跳绳的时长还是在增加,所以热量消耗还是会变化。
31.OTA回调失败或成功后没有回调设备断开
这是因为无论是回调失败还是成功,都说明OTA流程结束了,这个是最高的事件优先级,收到这两个状态说明设备一定是断开的了,再回调断开状态已无意义
32.SDK支持什么架构?
arm64-v8a、armeabi、armeabi-v7a、x86、x86_64
33.App不需要支持那么多的架构,如何精简?
可在gradle中的defaultConfig增加
android{
...
defaultConfig{
...
ndk {
abiFilters 'armeabi', 'arm64-v8a'
}
}
}
abiFilters
后面的就是app打包需要的架构,可自行根据所需配置
34.蓝牙和定位权限都给了,SDK也初始化了,为什么还是扫描不到设备?
目前遇到的大多数原因是因为定位关了,蓝牙操作不但要定位权限,还要定位打开。
35.需要显示肌肉量,但是ICWeightData里,只有肌肉率?
肌肉量可以通过肌肉率和体重换算得到,如: 肌肉量 = 肌肉率 * 体重(kg)
. 其他体脂数据如含水量,脂肪量也是如此。