血糖SDK 3.1 快速集成说明

特别提醒:本说明仅用于最基本的集成,详细API请参考javaDoc

本说明基于Android Studio 3.0

集入项目

  1. 下载SDK
  2. jar 文件复制到/app/libs
  3. jniLibs 文件夹(包括文件夹) 复制到 /app/src/main

目录结构请参考dome

  1. 在app的build.gradle文件中 加入
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    ...
}
  1. AndroidManifest.xml中加入以下权限
<uses-permission android:name=”android.permission.BLUETOOTH”/>
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY"/>

初始化

  1. 建议全局使用单一实例,并建议在Application onCreate 周期内进行初始化
bgManager = UKBGManager.getInstance(this);

 /**
     * 初始化蓝牙控制对象
     *
     * @return 返回<br>
     * 1 为初始化成功,<br>
     * -1 为系统版本低于4.3,<br>
     * -2 硬件不支持BLE,<br>
     * -3 蓝牙未打开
     * -4 key出错
     */
bgManager.bleInit("<这里传入你的KEY>");

连接设备

特别注意 因为SDK有大量频繁的回调为了不影响UI线程,所以所有回调都在子线程回调,如需操作UI请主动在UI线程执行使用 Handler 或者 runOnUiThread都是可以的

  1. 搜索设备

开发者可自行实现,但是连接前必须搜索,连接时传入MAC即可

连接设备前请先搜索设备,如果要保留上次连接的设备,不想用户再次选择设备,当连接时也应先搜素设备,等搜索回调了此设备MAC后再调用连接的方法

//设置扫描设备的回调
 mAppContext.getBgManager().setIBleScan(new IBleScan() {
            @Override
            public void onScan(final BluetoothDevice device, int rssi) {
             //返回扫描得到的设备信息
            }

            @Override
            public void onScanStateChange(final int stateCode) {
              //扫描状态
              //0.查找设备
              //1.正在搜索蓝牙设备
              //2.扫描完成
            }
        });

//开始扫描
//传入为扫描超时时间
//当传入-1时则会一直持续扫描,知道主动停止扫描
mAppContext.getBgManager().scanLeDeviceStart(10000);
    
//主动停止扫描
mAppContext.getBgManager().scanLeDeviceStop();

  1. 连接设备,添加设备状态监听器,用于监听设备连接的状态,并使用搜索到的MAC,调用连接设备的方法,连接设备
//因为考虑多个页面同时需要监测设备状态,设备的连接状态使用订阅回调的方式进行回调,
 mAppContext.getBgManager().addIBleConnectState(new IBleConnectState() {
 @Override
    public void onConnectStateChange(final int stateCode) {
//关于具体回调的状态对应的意义请查阅javaDoc
    }
     
 });
 //移除指定设备状态监听器
 mAppContext.getBgManager().removeIBleConnectState();
 //移除所有的状态监听器
 mAppContext.getBgManager().clearIBleConnectState();
 
/**
* 连接设备
*
* @param address 设备MAC地址
* @return -1 授权失败,1成功
*/
mAppContext.getBgManager().bleConnect(String address) 

/**
     * 断开设备连接
     */
    public void bleClose()
 
  1. 连接过程,这个过程无需干预会由SDK自动完成,这个过程中将会在onConnectStateChange中回调大量的状态,这些状态开发者可以忽略,只用于错误的定位,不过这个过程由于非常的复杂,并且会受传输的数据量的影响,所以需要的时间相对较长,第一次连接或者长时间不连接需要更多的时间,3-5分钟都可以视为正常的状况

  2. 连接完成,当onConnectStateChange中回调BleStateCode.CS_MONITORINGEND_CHECKDIGITED或者BleStateCode.CS_CHECKDIGITED 时表示连接过程结束

获取数据

获取当前连接的传感器ID

必须等待连接的整个流程完成后方可调用

    /**
     * 获得当前传感器ID
     *
     * @return
     */
    public String getSensorID()

关于参比

由于动态血糖的实现原理,设备采集的数据并不能直接转化为血糖值,需要对数据加入参比对原始数据进行转化

  1. 当设备上电3小时后才可输入参比,使用SDK内置的参比时间段方法可以方便判断时间是否可行
//这个是可输入参比的最小值,一经确定就不会变化,
/**
     * 获取传感器,输入参比时间范围的最小值
     *
     * @param sensorID 传感器ID
     * @return 当返回-1时表示获取失败,很有可能是数据未取完整或者,根本就还没开始监测
     */
    public long getEnterStartReferenceTimestamp(String sensorID)

//这个是最大值,这个会随着时间的推移渐渐变大
//基本的计算方法为 =当前时间<获得最新数据时间?当前时间:获得最新数据时间 (当然里边还有其他因数,不过大概是这样,仅供理解)

  /**
     * 获取传感器,输入参比时间范围的最大值
     *
     * @param sensorID 传感器ID
     * @return 当返回-1时表示获取失败,很有可能是数据未取完整或者,根本就还没开始监测
     */
    public long getEnterEndReferenceTimestamp(String sensorID)

  1. 输入参比,需要设备保持连接,保存参比采用完全覆盖的方式,如果你需要对参比的列表进行修改,也直接调用这个方法,请至少有一条记录,否则设备端将不接受,不超过15条记录,在非必要时请不要调用本方法,对保存的次数有计次的优化处理,超出255将导致溢出(设备重新上电重置),将导致参比无法同步


class BGReference{
//传感器id
    private String sensorID;
//参比值范围为1-254,这里应该传入一个整型数据,例如:实际上测得5.6mmol/L 那么传入的为5.6*10=56,这里就传入56,这里由于需要存入设备,所以只能保存一位小数
    private int reference;
//参比的时间戳,请开发者自行判断用户输入的时间是否在合适的范围(参比时间范围的最小值<用户输入的时间<参比时间范围的最大值),请务必判断否则将直接影响血糖数据的完整
    private long timestamp;
}


    /**
     * 保存参比
     *
     * @param references
     * @param iInspectionData
     */
    public void saveReference(final boolean isForcedLocalStore, //这个参数建议不改变 false ,主要用于强制本地储存参比
            final List<BGReference> references,//sensorID,reference,timestamp填充这三个即可,请至少有一条记录,否则设备端将不接受
            final String sensorID, //传感器ID
            IInspectionData iInspectionData)//保存参比异步进行,完成后的回调

参比对血糖数据的影响

直到输入参比前的血糖数据都将为0,直到用户输入至少一个参比

例如 1月1日8时上电(佩戴),1月2日7时输入参比7mmol/L,
这个情况下,那么这个用户的血糖数据将从1月2日7时开始,在此之前的血糖都将为0

当一个时间的参比改变,那么从这个时间后面所有的血糖数据都将被改变

监听实时数据

实时的数据是设备3分钟采集后推送的数据

   /**
     * 设置血糖数据监听器
     *
     * @param iGetBGData
     */
    public void addIGetBGData(IGetBGData iGetBGData)


class BGRecordAssistant{
    private float eletricity;// 电流值
    private float bloodGlucose;// 血糖值
    private String sensorId;// 传感器id
    private String launcherId;// 发射器id
    private long timestamp;//时间戳
}

查询历史数据

不需要连接设备

因为算法局限,所有的数据将SDK将会对所有的数据进行储存,所有获取的数据是从SDK的本地数据库读取的

 /**
     * 根据传感器ID取出所有的血糖数据
     *
     * @param context
     * @param sensorID
     * @return
     */
UKDBManager.getDataForSensorID(Context context, String sensorID)