
#集成准备
###获取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(必须) | 扫描链接设备权限。
ACCESS_COARSE_LOCATION(必须) | 扫描设备权限。
ACCESS_FINE_LOCATION（可选） |扫描设备权限

###初始化
在使用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()|年龄








