Android SDK使用说明
最后更新:2022年08月16日
BLE SDK接入步骤
接口文档请见 Android BLE SDK文档
1. 引入依赖包
implementation files('libs/blelib.jar')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
2. 权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
<service
android:name="com.ble.ble.BleService"
android:enabled="true"
android:exported="false" />
</application>
3. 初始化
BleMainProxy.getInstance().init(getApplicationContext());
//用户信息 部分功能需要先设置用户信息
BleMainProxy.bleConfiguration =new BleConfiguration(
年龄,
体重,
身高,
用户id);
4. 指令发送
DeviceCmdUtil 提供设备指令发送函数
5.设备响应结果
通过 EventBus 透传设备的响应结果及相应数据在相关页面注册 EventBus
EventBus.getDefault().register(this);
订阅需要的事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
switch (event.messageType) {
case msgType_Query_Device_Time:
break;
....................
}
}
事件类型定义
事件 | 说明 |
---|---|
msgType_Connect | 设备连接成功 |
msgType_BatteryPercent | 电池电量变化 |
msgType_Bind | 用户绑定 |
msgType_Offline_Del | 删除多导联离线文件 |
msgType_Device | 扫描到的设备 |
msgType_Synthesize | 综合数据 |
msgType_RELEASE | 解除绑定 |
msgType_Query_User_Info | 用户信息查询结果 |
msgType_Set_User_Info | 设置用户信息 |
msgType_Set_User_Id | 设置用户id |
msgType_Query_User_Id | 查询用户id |
msgType_Clear_Offline_Data | 删除离线设备主机中所有离线数据 |
msgType_Offline_Space | 查询主机离线数据空间 |
msgType_Offline_Detail | 查询离线上传详情 |
msgType_Set_Offline_Time | 设置自动离线时间 |
msgType_Set_Offline_Switch | 设置自动离线开关 |
msgType_Query_Device_Time | 查询主机时间 |
msgType_Set_Device_Time | 设置主机时间 |
msgType_Query_User_Name | 查询用户名 |
msgType_Set_User_Name | 设置用户名 |
msgType_Set_WIFI_INFO | 设置WIFI |
msgType_Query_WIFI_Name | 查询WIFI名 |
msgType_Query_WIFI_Password | 查询WIFI密码 |
ECG SDK接入步骤
接口文档请见 Android ECG SDK文档
1、绘制实时心电数据
在布局文件中添加 EcgRealView
<com.amsu.ecglib.EcgRealView
android:id="@+id/ecg"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
绘制心电图
ecg = findViewById(R.id.ecg);
// 设置采样率和gaink值
// 心电贴产品取3466,V6主机取4096
ecg.setEcgType(150,4096);
// 获取原始数据
BleServiceProxy.getInstance().setOriginalDataCallback(new BleServiceProxy.OriginalDataCallback() {
@Override
public void originalData(byte[] ecgValue) {
// 滤波后绘制实时心电图
ecg.drawRealEcg(EcgFilterUtil.filter(ecgValue));
}
});
注意
请仅在页面可见的情况下执行绘制函数,否则可能因数据堆积导致绘图速度异常。
2、绘制在线心电文件
在线心电文件是指通过 APP 蓝牙传输并保存的心电文件
在布局文件中添加 EcgNewView
<com.amsu.ecglib.EcgNewView
android:id="@+id/ecg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/topbar"
android:layout_above="@+id/layout2"/>
绘制在线心电文件
// 设置采样率和gainK值
// gaink值心电贴产品取3466,V6主机取4096
ecg.setEcgType(150, 4096);
// 对于AMSU APP端采集的文件,跳过文件前256个字节头部信息
inputStream.skip(256);
inputStream.read(ecgValues);
// 传递滤波后的数据
int[] datas = EcgFilterUtil.filter(ecgValues);
ecg.drawOfflineEcg(datas);
// 开始绘制
ecg.startDraw();
// 暂停绘制
ecg.pauseDraw();
3、绘制设离线心电文件
离线心电文件是指在设备内存储并通过蓝牙、Wi-Fi 或数据线导出的心电文件
在布局文件中添加 EcgNewView
<com.amsu.ecglib.EcgNewView
android:id="@+id/ecg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/topbar"
android:layout_above="@+id/layout2"/>
绘制离线心电文件
// 设置采样率和gainK值
ecg.setEcgType(250, 3466);
// 对于心电贴离线文件,每1024个字节为一包,每包跳过前24个字节头部信息
ecgValues = new byte[totalCount/1024*1000];
byte[] temp = new byte[1024];
int i = 0;
while (inputStream.read(temp)!=-1) {
byte[] copy = Arrays.copyOfRange(temp, 24, temp.length);
System.arraycopy(copy,0,ecgValues,i*1000,copy.length);
i++;
}
// 传递滤波后的数据
int[] datas = EcgFilterUtil.filter(ecgValues);
ecg.drawOfflineEcg(datas);
// 开始绘制
ecg.startDraw();
// 暂停绘制
ecg.pauseDraw();