特别提醒:本说明仅用于最基本的集成,详细API请参考javaDoc
本说明基于Android Studio 3.0
jar
文件复制到/app/libs
jniLibs
文件夹(包括文件夹) 复制到 /app/src/main
目录结构请参考dome
build.gradle
文件中 加入dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
...
}
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"/>
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
都是可以的
开发者可自行实现,但是连接前必须搜索,连接时传入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();
//因为考虑多个页面同时需要监测设备状态,设备的连接状态使用订阅回调的方式进行回调,
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()
连接过程,这个过程无需干预会由SDK自动完成,这个过程中将会在onConnectStateChange
中回调大量的状态,这些状态开发者可以忽略,只用于错误的定位,不过这个过程由于非常的复杂,并且会受传输的数据量的影响,所以需要的时间相对较长,第一次连接或者长时间不连接需要更多的时间,3-5分钟都可以视为正常的状况
连接完成,当onConnectStateChange
中回调BleStateCode.CS_MONITORINGEND_CHECKDIGITED
或者BleStateCode.CS_CHECKDIGITED
时表示连接过程结束
必须等待连接的整个流程完成后方可调用
/**
* 获得当前传感器ID
*
* @return
*/
public String getSensorID()
由于动态血糖的实现原理,设备采集的数据并不能直接转化为血糖值,需要对数据加入参比对原始数据进行转化
//这个是可输入参比的最小值,一经确定就不会变化,
/**
* 获取传感器,输入参比时间范围的最小值
*
* @param sensorID 传感器ID
* @return 当返回-1时表示获取失败,很有可能是数据未取完整或者,根本就还没开始监测
*/
public long getEnterStartReferenceTimestamp(String sensorID)
//这个是最大值,这个会随着时间的推移渐渐变大
//基本的计算方法为 =当前时间<获得最新数据时间?当前时间:获得最新数据时间 (当然里边还有其他因数,不过大概是这样,仅供理解)
/**
* 获取传感器,输入参比时间范围的最大值
*
* @param sensorID 传感器ID
* @return 当返回-1时表示获取失败,很有可能是数据未取完整或者,根本就还没开始监测
*/
public long getEnterEndReferenceTimestamp(String sensorID)
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)