Skip to main content
版本:1.2.4

Unity

Unity Android SDK接入说明

SDK文件

下载SDK,alg-unity-android-v1.2.4.zip

alg.aar //包含jar包和清单文件(权限申明)
(cpu-type)/libnative-alg.so //算法C库

对应桥接类名

#if UNITY_ANDROID
private static AndroidJavaClass _helper;
public static AndroidJavaClass helper
{
get
{
if (_helper != null) return _helper;
_helper = new AndroidJavaClass("com.deepbaysz.alg.BLHelper");
return _helper;
}
}

发送数据给Unity,receiver = "BLHelper", method = "onMsg",接收安卓回调的gameobject名字必须为"BLHelper",脚本名也为"BLHelper”. BLHelper图

    /**
* 发送数据到Unity
*
* @param fmt 格式化数据
*/
private static void sendToApp(String fmt) {
Log.d(TAG, "sendToApp: " + fmt);
UnityPlayer.UnitySendMessage(receiver, method, fmt);
}

扫描设备实例

    JSONObject obj = new JSONObject();
try {
obj.put("type", TYPE.FIND_DEVICE.ordinal());
obj.put("name", device.getName());
obj.put("address", device.getAddress());
obj.put("state", btManager.getConnectionState(device, BluetoothProfile.GATT)); //0=disconnected 1=connecting 2=connected 3=disconnecting
sendToApp(obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}

SDK方法说明

  1. init(String param) 初始化数据和请求蓝牙权限
  2. scanDevice 扫描设备
  3. scanStop 停止扫描
  4. connectDevice(String address) 连接设备
  5. disconnectDevice(String address) 断开连接
  6. getVersion(String address) 获取设备固件版本
  7. getBattery(String address) 获取设备电量

init方法param参数说明

  • blReceiver: 接收数据的gameObject名称,默认BLHelper

  • blMethod: 接收数据的方法名称,默认onMsg

  • accountId: 分配给开发者的鉴权id

  • token: 分配给开发者的鉴权token

项目依赖

目前项目依赖okhttp,需要在安卓项目中添加依赖项 implementation("com.squareup.okhttp3:okhttp:4.10.0")

Unity接收方法数据方法

    enum TYPE {
none = 0,
data = 1,//蓝牙数据
find_device = 2,//扫描设备回调
connect_succeed = 3,//连接成功回调
connect_failed = 4,//连接失败回调
disconnected = 5,//断开连接回调
device = 6 //获取设备信息(电量,固件版本)
};
  1. 蓝牙数据参数 (signal 0信号质量好,1信号质量异常)
{
"address":"D6:5E:71:12:99:0C",
"type":1, // int 类型
"mindfulness":0, // float 类型
"stress":0,// int 类型
"fatigue":0,// int 类型
"emotion":0,// float 类型
"focus":0,// int 类型
"energy":{
"alpha":0, // float 类型
"beta":0, // float 类型
"theta":0, // float 类型
"delta":0, // float 类型
"gamma":0 // float 类型
},
"signal":1 // int 类型
}

算法指标说明请参考:数据说明

  1. 扫描设备参数 (state 0未连接, 1连接中, 2已连接)
{
"type":2,
"name":"Dbay-EEG2-283D",
"address":"D2:F7:33:DA:C8:C6",
"state":0
}
  1. 连接设备参数
{
"type":3,
"address":"DF:EB:68:47:64:30",
"state":2
}
  1. 连接失败参数
{
"type":4,
"address":"DF:EB:68:47:64:30",
"state":0
}
  1. 断开设备参数
{
"type":5,
"address":"DF:EB:68:47:64:30",
"state":0
}
  1. 获取设备信息参数
{
"type":6,
"address":"DF:EB:68:47:64:30",
"battery":10
}

{
"type":6,
"address":"DF:EB:68:47:64:30",
"version":"29-xx"
}

Unity接收扫描设备数据

    void onMsg(string json)
{
Debug.Log("---onMsg---" + json);
BLData data = JsonUtility.FromJson<BLData>(json);
if (data.type == (int)TYPE.find_device)
{
if (!blDevice.ContainsKey(data.address))
{
blDeviceList.Add(data);
blDevice.Add(data.address, data);
}
else
blDevice[data.address] = data;
refreshDevice();
#if USE_MESSENGER
Messenger.Broadcast("type_find_device", data);
#endif
}

}

Unity iOS SDK接入说明

SDK文件

下载SDK,alg-unity-ios-v1.2.zip

DBAlgorithm.framework //包含算法SDK的动态库文件
BLHelper.h BLHelper.m //调用桥接SDK文件的类
README.md //SDK接入说明文件

对应桥接类名

发送数据给Unity,receiver = "BLHelper", method = "onMsg",接收iOS回调的gameobject名字必须为"BLHelper",脚本名也为"BLHelper”. BLHelper图

/// 发送所有的通信数据到Unity端
/// @param json 结构化的数据
-(void)sendToApp:(NSString*)json
{
// PS:当使用Unity3d的时候,使用下面的方法发送消息,同时需要打开"UnityInterface.h"文件的引用
UnitySendMessage(getChar(receiver), getChar(method), getChar(json));
}

扫描设备实例

NSDictionary * deviceDict = @{
@"address": peripheral.identifier.UUIDString,
@"name": peripheral.name,
@"state": [NSNumber numberWithInt:(int)peripheral.state],
@"type":[NSNumber numberWithInt:type_connect_succeed],
};
[self sendToApp:[self objectToJson:deviceDict]];

SDK 方法说明

  1. init(String param); 初始化数据和请求蓝牙权限.
  2. scanDevice(); 扫描设备.
  3. scanStop(); 停止扫描.
  4. connectDevice(String address); 连接设备.
  5. disconnectDevice(String address); 断开连接.
  6. getVersion(String address); 获取设备固件版本.
  7. getBattery(String address); 获取设备电量.

Unity接收方法数据方法

enum TYPE {
none = 0,
data = 1,//蓝牙数据
find_device = 2,//扫描设备回调
connect_succeed = 3,//连接成功回调
connect_failed = 4,//连接失败回调
disconnected = 5,//断开连接回调
device = 6 //获取设备信息(电量,固件版本)
};
  1. 蓝牙数据参数 (signal 0信号质量好,1信号质量异常)

    {
    "address": "D6:5E:71:12:99:0C",
    "type": 1, // int 类型
    "mindfulness": 0, // float 类型
    "stress": 0, // int 类型
    "fatigue": 0, // int 类型
    "emotion": 0, // float 类型
    "focus": 0, // int 类型
    "energy": {
    "alpha":0, // float 类型
    "beta":0, // float 类型
    "theta":0, // float 类型
    "delta":0, // float 类型
    "gamma":0 // float 类型
    },
    "signal": 1
    }
  2. 扫描设备返回数据 (state 0未连接, 1连接中, 2已连接)

    {
    "type": 2,
    "name": "Dbay-EEG2-283D",
    "address": "D2:F7:33:DA:C8:C6",
    "state": 0
    }
  3. 连接设备返回数据

{
"type": 3,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 2
}
  1. 连接失败返回数据
{
"type": 4,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
  1. 断开设备返回数据
{
"type": 5,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
  1. 获取设备电量返回数据
{
"type": 6,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"battery": 60
}
  1. 获取设备版本返回数据
{
"type": 6,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"version": "0.2.9"
}

Unity接收扫描设备数据

void onMsg(string json)
{
Debug.Log("---onMsg---" + json);
BLData data = JsonUtility.FromJson<BLData>(json);
if (data.type == (int)TYPE.find_device)
{
if (!blDevice.ContainsKey(data.address))
{
blDeviceList.Add(data);
blDevice.Add(data.address, data);
}
else
blDevice[data.address] = data;
refreshDevice();
#if USE_MESSENGER
Messenger.Broadcast("type_find_device", data);
#endif
}
}