Android
Alg SDK接入説明
流程圖
環境要求
- Android 5.0 或以上
- 需要申請dbay賬號,用於SDK鑑權API.
手動集成SDK步驟
- 複製文件
alg-android-v1.0.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":{
"alpha":4.3394,
"beta":13.9877,
"theta":20.8158,
"delta":58.8296,
"gamma":2.0275
},
"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[] | 腦電算法計算 mindfulness 组成的数组 |
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;//正念得分
多維度分數請參考:數據説明