Android
集成准备
获取AppKey
集成心电SDK之前,您首先需要到创越官网注册并且添加新应用,获得secureKey。
特别提醒 :我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式如:ecg@企业域名、apps@企业域名、dev@企业域名。
版本支持
SDK android framework version
minSdkVersion 19
supportVersion 28.0.0
集成方式
自动集成
-
在project级的build.gradle 文件下添加
repositories { maven { url 'http://sdk.creyond.com:8100/nexus/content/repositories/android/' } }
-
在module级的build.gradle 文件下添加
implementation "com.creyond:EcgSdk:1.0.0"
权限授予
心电SDK使用前需要宿主APP授予如下权限:
权限 | 用途 |
---|---|
BLUETOOTH_ADMIN(必须) | 扫描链接设备权限。 |
BLUETOOTH(必须) | 扫描链接设备权限。 |
ACCESSCOARSELOCATION(必须) | 扫描设备权限。 |
ACCESSFINELOCATION(可选) | 扫描设备权限 |
初始化
在使用SDK功能之前调用初始化代码 (设置运动患者信息以提高分析精确度) 必须确保初始化成功再使用SDK的功能
Verify.Builder builder = new Verify.Builder("666666", "xiaoming")
.age(26)
.height(178)
.phone("1800989098")
.sex(Verify.Sex.MAN)
.weight(60)
.turnDistance(30);
EcgSDK.init(this, builder.build(), new EcgSDK.CallBack() {
@Override
public void success() {
}
@Override
public void error(ErrorMsg errorMsg) {
}
});
功能使用
扫描心电设备
Bluetooth.scan( new Bluetooth.ScanListener() {
@Override
public void findOne(Device device) {
//todo 扫描到了一个心电设备
}
@Override
public void startScan() {
//todo 开始搜索
}
@Override
public void scanFail(String msg) {
//todo 扫描失败 原因为:msg }
@Override
public void scanFinished() {
//todo 扫描结束 }
});
获取心电数据并展示心电图
- 添加控件到布局
<com.creyond.support.ui.gl20.EcgGL20View
android:id="@+id/ecg_view"
android:layout_width="match_parent"
android:layout_centerInParent="true"
android:layout_height="150dp"/>
- 回调在子线程
String mac =device.getMac();
EcgGL20View ecg_view;
TextView tv_state;
EcgDisplayer ecgDisplayer;
private void watch(final Device device) {
ecgDisplayer = new EcgDisplayer.Builder(device.getMac(), ecg_view)
.turnDistance(30)
.newDisplayer();
device.watch( new WatchListener() {
@Override
public void accept(byte[] bytes) {
//todo 原始设备心电数据
ecgDisplayer.capture(bytes, null);
}
@Override
public void connected() {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_state.setText("连接成功 mac:" + device.getMac());
}
});
}
@Override
public void start() {
}
@Override
public void fail(final String msg) {
}
@Override
public void disConnected() {
}
});
}
@Override
protected void onResume() {
super.onResume();
ecg_view.resume();
}
@Override
protected void onPause() {
super.onPause();
ecg_view.pause();
}
开始运动前调用
ecgDisplayer.startRecord();
获取实时心电数据分析结果
ecgDisplayer.capture(bytes, new CaptureCallback() {
@Override
public void result(Result result) {
updateInfo(result);
}
});
心电回放
- 添加控件到布局
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.creyond.support.ui.playback.EcgPlaybackView
android:id="@+id/ecg_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<SeekBar android:layout_width="match_parent"
android:id="@+id/seek_bar"
android:layout_gravity="bottom"
android:layout_height="10dp"/>
</FrameLayout>
- 心电图回放
SeekBar seek_bar;
EcgPlaybackView ecg_view;
Playbacker playbacker;
String path = ecgDisplayer.getRecordPath();
File file = new File(path);
if (!file.exists() || file.length() == 0) {
Toast.makeText(this, "文件不存在或文件大小为0", Toast.LENGTH_LONG).show();
finish();
}
seek_bar.setMax(playbacker.getTotalPoints());
seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
playbacker.seek(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
API
Result
字段 | 描述 |
---|---|
getMotionStateDes() | 当前状态 |
getBat() | 设备电量 |
getStepCount() | 步数 |
getStepRate() | 步频 |
getHeartRate() | 心率 |
getMetArr() | 代谢当量 |
getRR() | RR间期 |
getRP() | 节律比例 |
Processor.Builder
字段 | 描述 |
---|---|
turnDistance() | 转身距离(M) |
height() | 身高 (cm) |
weight() | 体重(kg) |
age() | 年龄 |