|
|
|
@@ -0,0 +1,365 @@ |
|
|
|
|
|
|
|
# 好牙SDK使用说明 - Android |
|
|
|
|
|
|
|
最新版:[](https://jitpack.io/#elinkthings/ToothbrushSDKRepositoryAndroid) |
|
|
|
|
|
|
|
[aar包下载地址](https://github.com/elinkthings/ToothbrushSDKRepositoryAndroid/releases) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 使用条件 |
|
|
|
1,最低版本 android4.4(API 19) |
|
|
|
2,设备所使用的蓝牙版本需要4.0及以上 |
|
|
|
3,依赖环境androidx |
|
|
|
|
|
|
|
|
|
|
|
## 导入SDK |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
repositories { |
|
|
|
flatDir { |
|
|
|
dirs 'libs' |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
步骤1.将JitPack存储库添加到您的构建文件中 |
|
|
|
将其添加到存储库末尾的root build.gradle中: |
|
|
|
allprojects { |
|
|
|
repositories { |
|
|
|
... |
|
|
|
maven { url 'https://jitpack.io' } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
步骤2.添加依赖项 |
|
|
|
dependencies { |
|
|
|
implementation 'com.github.elinkthings:ToothbrushSDKRepositoryAndroid:+' |
|
|
|
} |
|
|
|
|
|
|
|
也可以使用aar包依赖,请自行下载放到项目的libs中 |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
## 权限设置 |
|
|
|
|
|
|
|
``` |
|
|
|
<!--In most cases, you need to ensure that the device supports BLE.--> |
|
|
|
<uses-feature |
|
|
|
android:name="android.hardware.bluetooth_le" |
|
|
|
android:required="true"/> |
|
|
|
|
|
|
|
<uses-permission android:name="android.permission.BLUETOOTH"/> |
|
|
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> |
|
|
|
|
|
|
|
<!--Android 6.0 and above. Bluetooth scanning requires one of the following two permissions. You need to apply at run time.--> |
|
|
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> |
|
|
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> |
|
|
|
|
|
|
|
<!--Optional. If your app need dfu function.--> |
|
|
|
<uses-permission android:name="android.permission.INTERNET"/> |
|
|
|
``` |
|
|
|
|
|
|
|
> 6.0及以上系统必须要定位权限,且需要手动获取权限 |
|
|
|
|
|
|
|
## 开始接入 |
|
|
|
|
|
|
|
- 首先给SDK配置key和secret,[申请地址](http://sdk.aicare.net.cn) |
|
|
|
``` |
|
|
|
//在主项目的application中调用 |
|
|
|
ToothbrushSDK.getInstance().init(this,"key","secret"); |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 在AndroidManifest.xml application标签下面增加 |
|
|
|
``` |
|
|
|
<application> |
|
|
|
... |
|
|
|
|
|
|
|
<service android:name="aicare.net.cn.toothbrushlibrary.toothbrush.ToothbrushService"/> |
|
|
|
|
|
|
|
</application> |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
- 你可以直接让你自己的`Activity`类继承`BleProfileServiceReadyActivity` |
|
|
|
|
|
|
|
``` |
|
|
|
public class MyActivity extends BleProfileServiceReadyActivity |
|
|
|
@Override |
|
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
|
super.onCreate(savedInstanceState); |
|
|
|
//判断手机设备是否支持Ble |
|
|
|
if (!ensureBLESupported()) { |
|
|
|
T.showShort(this, R.string.not_support_ble); |
|
|
|
finish(); |
|
|
|
} |
|
|
|
//判断是否有定位权限,此方法没有进行封装具体代码可在demo中获得,也可按照自己方式去调用请求权限方法 |
|
|
|
initPermissions(); |
|
|
|
//判断蓝牙是否打开,若需要换样式,可自己去实现 |
|
|
|
if (!isBLEEnabled()) { |
|
|
|
showBLEDialog(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
## 扫描设备,停止扫描设备,查看扫描状态 |
|
|
|
与扫描相关的API如下,详情参考BleProfileServiceReadyActivity类,具体使用参考demo |
|
|
|
|
|
|
|
``` |
|
|
|
//调用startScan方法开启扫描 |
|
|
|
startScan(); |
|
|
|
//getDevice(BrushDevice device)可以获取到符合协议的设备 |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void getDevice(final BrushDevice device) { |
|
|
|
//符合协议的设备 |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//调用stopScan方法停止扫描 |
|
|
|
stopScan(); |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 连接设备,断开设备 |
|
|
|
|
|
|
|
与连接相关的API如下,详情参考BleProfileServiceReadyActivity类,具体使用参考demo。 |
|
|
|
|
|
|
|
``` |
|
|
|
//调用startConnectService(String address)方法去连接设备 需要传入设备mac地址对象,可以在getDevice()方法中获得 。 |
|
|
|
|
|
|
|
startConnectService(String address)//连接设备 |
|
|
|
//在onStateChanged可以获取到连接状态 |
|
|
|
@Override |
|
|
|
public void onStateChanged(String deviceAddress, int state) { |
|
|
|
super.onStateChanged(deviceAddress, state); |
|
|
|
//state 具体状态看类说明 |
|
|
|
//连接成功:(state = BleProfileService.STATE_CONNECTED) |
|
|
|
//断开连接:(state = BleProfileService.STATE_DISCONNECTED) |
|
|
|
//校验成功:(state = BleProfileService.STATE_INDICATION_SUCCESS) |
|
|
|
} |
|
|
|
//调用PabulumService.PabulumBinder类中disconnect方法去断开连接 |
|
|
|
binder.disconnect() |
|
|
|
``` |
|
|
|
|
|
|
|
使用`startConnectService`方法连接,,使用`onStateChanged`方法监听连接的状态,使用`onError`方法监听连接过程中的异常,以便于进行额外的处理和问题排查。使用`isConnected`方法判断连接是否已经建立。 |
|
|
|
|
|
|
|
## 连接成功,接受设备返回的数据 |
|
|
|
以下方法或接口可直接在继承BleProfileServiceReadyActivity类后自动获得 |
|
|
|
|
|
|
|
``` |
|
|
|
//onServiceBinded方法中获得PabulumService.PabulumBinder的实例 |
|
|
|
@Override |
|
|
|
protected void onServiceBinded(BleProfileService.LocalBinder binder) { |
|
|
|
this.binder = (ToothbrushService.ToothbrushBinder) binder; |
|
|
|
|
|
|
|
} |
|
|
|
//电量信息 |
|
|
|
@Override |
|
|
|
public void getBatteryState(BatteryState batteryState) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//设备信息 |
|
|
|
@Override |
|
|
|
public void onResultChange(int type, final String result) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//档位信息 |
|
|
|
@Override |
|
|
|
protected void getGears(GearBean gearBean) { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//设备状态信息 |
|
|
|
@Override |
|
|
|
public void getResultState(int type, byte state) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//历史记录条数 |
|
|
|
@Override |
|
|
|
public void getHistoryCount(int count) { |
|
|
|
|
|
|
|
} |
|
|
|
//历史记录数据 |
|
|
|
@Override |
|
|
|
public void getHistoryData(HistoryData historyData) { |
|
|
|
|
|
|
|
} |
|
|
|
//工作数据(连接状态下刷牙完成会回调) |
|
|
|
@Override |
|
|
|
public void getWorkData(WorkData workData) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//版本号 |
|
|
|
@Override |
|
|
|
protected void getVersion(String version) { |
|
|
|
|
|
|
|
} |
|
|
|
//设备授权,可以确认连接的设备是哪个 |
|
|
|
@Override |
|
|
|
public void getAuthState(byte state) { |
|
|
|
//1,用户授权 |
|
|
|
//2,待授权 |
|
|
|
//3,已授权 |
|
|
|
} |
|
|
|
|
|
|
|
//档位信息 |
|
|
|
@Override |
|
|
|
protected void getGears(GearBean gearBean) { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
//OTA升级成功 |
|
|
|
@Override |
|
|
|
public void onOtaSuccess() { |
|
|
|
|
|
|
|
} |
|
|
|
//OTA进度百分比 |
|
|
|
@Override |
|
|
|
public void onProgressChange(final float progress) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
> 注意:这些接口或方法部分需要APP给体脂下发命令才会有返回数据. |
|
|
|
## APP给设备下发指令 |
|
|
|
在BleProfileServiceReadyActivity.onServiceBinded(ToothbrushService.ToothbrushBinder binder)获得ToothbrushService.ToothbrushBinder的实例,调用binder里面方法 |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
查询工作状态:queryWorkState(); |
|
|
|
|
|
|
|
查询电池状态:queryBatteryState(); |
|
|
|
|
|
|
|
设置工作参数:setWorkParam(WorkState workState) |
|
|
|
|
|
|
|
切换工作状态(开/关):changeWorkState(); |
|
|
|
|
|
|
|
设置设备SN:setDeviceSN(String deviceSN); |
|
|
|
|
|
|
|
查询设备SN:queryDeviceSN(); |
|
|
|
|
|
|
|
设置时间:setTime(); |
|
|
|
|
|
|
|
查询时间:queryTime(); |
|
|
|
|
|
|
|
请求同步历史数据(查/删):operateHistory(byte command) |
|
|
|
//ToothbrushBleConfig.QUERY_HISTORY //查询 |
|
|
|
//ToothbrushBleConfig.CANCEL_HISTORY //取消 |
|
|
|
//ToothbrushBleConfig.DELETE_HISTORY //删除 |
|
|
|
|
|
|
|
OTA开始升级:startUpdate(String fileName);//注意权限 |
|
|
|
|
|
|
|
升级成功后,重启设备:reboot(); |
|
|
|
|
|
|
|
请求配对:requestPair(long timeMills); |
|
|
|
|
|
|
|
查询模式档位信息:queryGear(); |
|
|
|
|
|
|
|
设置DID:setDid(int did); |
|
|
|
|
|
|
|
获取电压:getVoltage(); |
|
|
|
|
|
|
|
设置电压:setVoltage(boolean status, byte[] data); |
|
|
|
|
|
|
|
设置设备名: setName(String name); |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
## 类说明 |
|
|
|
|
|
|
|
#### WorkState(工作状态) |
|
|
|
| 类型| 参数名| 说明 |
|
|
|
| ---|---|--- |
|
|
|
| byte | workState | 工作状态: 0x00(初始化); 0x01(启动); 0x02(结束); 0x03(低电,禁止启动); 0x04(充电中,禁止启动) |
|
|
|
| byte | strength | 力度: 0x00(力度正常); 0x01(力度过大) |
|
|
|
| byte | workNode | 工作节点: 0x00(0节点); 0x01(1节点); 0x02(节点); 0x03(节点); 0x04(节点) |
|
|
|
| String | deviceSN | 设备SN |
|
|
|
| boolean | isSetTime | 是否设置时间 |
|
|
|
| byte | operateHistoryCmd | 操作历史数据的指令 |
|
|
|
|
|
|
|
``` |
|
|
|
ToothbrushBleConfig.QUERY_HISTORY //查询 |
|
|
|
ToothbrushBleConfig.CANCEL_HISTORY //取消 |
|
|
|
ToothbrushBleConfig.DELETE_HISTORY //删除 |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### WorkData(工作数据) |
|
|
|
| 类型| 参数名| 说明 |
|
|
|
| ---|---|--- |
|
|
|
| String | startTime | 起始时间(yyyy-MM-dd HH:mm:ss) |
|
|
|
| int | workTime | 工作时长 |
|
|
|
| int | overPowerCount | 力度过大次数 |
|
|
|
| int | overPowerTime | 力度过大时长(s) |
|
|
|
| int | leftBrushTime | 左边刷牙时长(s) |
|
|
|
| int | rightBrushTime | 右边刷牙时长(s) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### HistoryData(历史记录数据) |
|
|
|
| 类型| 参数名| 说明 |
|
|
|
| ---|---|--- |
|
|
|
| WorkData | workData | 工作数据 |
|
|
|
| int | id | 序号(可用于计算进度) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### BatteryState(电池状态) |
|
|
|
| 类型| 参数名| 说明 |
|
|
|
| ---|---|--- |
|
|
|
| byte | chargerState | 电源状态: 0x00 未知; 0x01 未插入充电器; 0x02 插入充电器 |
|
|
|
| byte | batteryState | 电池状态: 0x00 未知; 0x01 电池未充满; 0x02 电池充满 |
|
|
|
| byte | powerState | 电量状态: 0x00 未知; 0x01 低电关机; 0x02 电量正常; 0x03 低电提醒 |
|
|
|
| double | battery | 电量: 设备电压值 |
|
|
|
| int | maxElectricity | 峰值电流 |
|
|
|
| double | capacity | 电池容量 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 版本历史 |
|
|
|
|版本号|更新时间|作者|更新信息| |
|
|
|
|:----|:---|:-----|-----| |
|
|
|
| 1.2.5 | 2020/05/29 | 陈福行 | 切换到androidx,修复已知bug |
|
|
|
|
|
|
|
## FAQ |
|
|
|
|
|
|
|
- 扫描不到蓝牙设备? |
|
|
|
1.查看App权限是否正常,6.0及以上系统必须要定位权限,且需要手动获取权限 |
|
|
|
2.查看手机的定位服务是否开启,部分手机可能需要打开GPS |
|
|
|
3.拔掉电池重启秤 |
|
|
|
4.是否被其他手机连接(秤未被连接时,秤盘上蓝牙图标会不断闪烁) |
|
|
|
5.ToothbrushService是否在AndroidManifest中注册 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 联系我们 |
|
|
|
深圳市易连物联网有限公司 |
|
|
|
|
|
|
|
电话:0755-81773367 |
|
|
|
|
|
|
|
官网:www.elinkthings.com |
|
|
|
|
|
|
|
邮箱:app@elinkthings.com |