Android
Alg SDK接入说明
流程图
环境要求
- Android 5.0 或以上
- 需要申请dbay账号,用于SDK鉴权API.
手动集成SDK步骤
- 复制文件
alg-android-v1.2.aar
到工程libs
目录
app module下的build.gradle
添加以下内容
repositories {
flatDir {
dirs 'libs'
}
}
implementation(name:'alglibrary', ext:'aar')
SDK使用据需要申请蓝牙相关权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
SDK初始化方法说明
AlgSdk.init(context, accountId, token, algSdkInitCallback)
Parameter | Type | Description |
---|---|---|
context | Activity | 当前 activity context |
accountId | String | 唯一的accountId需要找dbay团队提供 |
token | String | 唯一的token需要找dbay团队提供 |
algSdkInitCallback | AlgSdkInitCallback | AlgSdkInitCallback 有2个回调方法:1. onSdkInitSuccess 成功之后可以调用SDK的方法;2. onSdkInitFail 初始化失败返回错误信息 |
SDK 添加设备方法
调用时机,在连接成功回调中调用 AlgSdk.addDevice(String deviceName)
Parameter | Type | Description |
---|---|---|
deviceName | String | 头环设备名称 |
Result | Type | Description |
---|---|---|
deviceIndex | int | 设备序号 |
示例代码:
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
if (newState == STATE_CONNECTED) {
deviceIndex = algSdk.addDevice(gatt.getDevice().getName());
//通过mBluetoothGatt.discoverServices(),我们就可以获取到ble设备的所有Services。
gatt.discoverServices();
} else if (newState == STATE_DISCONNECTED) {
algSdk.deleteDevice(gatt.getDevice().getName());
}
}
SDK 删除设备方法
调用时机,在断开连接回调中调用 AlgSdk.deleteDevice(String deviceName)
注意:在多设备连接情况下,必须成对添加和删除对应的设备,保证算法数据不错乱
Parameter | Type | Description |
---|---|---|
deviceName | String | 头环设备名称 |
Result | Type | Description |
---|---|---|
deviceIndex | int | 设备序号 |
SDK 算法调用
AlgSdk.warpAlgorithm(double[] data, int deviceIndex, boolean onEEG)
Parameter | Type | Description |
---|---|---|
data | double[] | 输入蓝牙原始数据数组 |
deviceIndex | int | 设备序号 |
onEEG | boolean | 是否返回原始数据(如果不需要原始eeg数据,设置为false ) |
Result | Type | Description |
---|---|---|
algorithm | JSONObject | 算法返回结果 |
algData为所有指标和能量数据
signal说明 0信号质量好,1信号质量异常
{
"algData":{
"mindfulness":-0.441,
"stress":41,
"fatigue":100,
"relaxation":100,
"emotion":0.3051,
"focus":32,
"energy":{
"alpha":1.2708,
"beta":1.931,
"theta":11.6847,
"delta":84.8496,
"gamma":0.2639
},
"signal":0
}
}
包含原始数据JSON,AF7Data为AF7通道数据,AF8Data为AF8通道数据
{
"AF7Data":Array[29],
"AF8Data":Array[29],
"algData":{
"mindfulness":0.3408,
"stress":65,
"fatigue":77,
"relaxation":77,
"emotion":-0.1953,
"focus":42,
"energy":{
"alphaRelative":0,
"betaRelative":0,
"thetaRelative":0,
"deltaRelative":0,
"gammaRelative":0,
"alphaAbsolute":0,
"betaAbsolute":0,
"thetaAbsolute":0,
"deltaAbsolute":0,
"gammaAbsolute":0
},
"signal":0
}
}
算法指标说明请参考:数据说明
示例代码:
byte[] data = characteristic.getValue();
if (characteristic.getUuid().toString().equals(UUID_CHARACTER_NOTIFY1)) {
JSONObject object = algSdk.warpAlgorithm(data, deviceIndex);
if (object != null) {
Log.d(TAG, "onCharacteristicChanged: " + object.toString());
}
}
SDK 正念指标雷达图分数
AlgSdk.getMindfulness(double[] data,int len)
Parameter | Type | Description |
---|---|---|
data | double[] | 512个AF7原始数据+512个AF8原始数据 的一维数组 |
len | int | 数据长度(请传512) |
Result | Type | Description |
---|---|---|
mindful | double | 正念指标值 |
AlgSdk.getMindfulnessScore(double[] data,int len)
Parameter | Type | Description |
---|---|---|
data | double[] | 脑电算法计算的正念值数组(经过getMindfulness得到) |
len | int | 数据长度 |
Result | Type | Description |
---|---|---|
mind | MindScore | 算法返回多维度分数 |
public class MindScore {
public int stability;//正念稳定度
public double potential;//正念潜力值
public double percent;//正念占比时间
public int score;//正念得分
多维度分数请参考:数据说明