SDK 类
SDK 类是 StreamInd Java SDK 的核心入口,用于管理终端连接、发送信号和处理指令。
导入
import com.streamind.sdk.SDK;构造函数
SDK sdk = new SDK();创建一个新的 SDK 实例。不需要传入任何参数。
方法
registerTerminal
public void registerTerminal(String terminalId, Config config)注册一个新的终端。
参数:
terminalId(String) - 终端的唯一标识符config(Config) - 终端的配置对象
示例:
Config config = new Config.Builder()...build();
sdk.registerTerminal("terminal-1", config);connect
public void connect(String terminalId) throws ConnectionException连接指定的终端到 StreamInd 平台。
参数:
terminalId(String) - 要连接的终端ID
异常:
ConnectionException- 连接失败时抛出
示例:
try {
sdk.connect("terminal-1");
System.out.println("连接成功");
} catch (ConnectionException e) {
System.err.println("连接失败: " + e.getMessage());
}connectAll
public Map<String, Boolean> connectAll()连接所有已注册的终端。
返回:
Map<String, Boolean>- 字典,键为终端ID,值为连接是否成功
示例:
Map<String, Boolean> results = sdk.connectAll();
for (Map.Entry<String, Boolean> entry : results.entrySet()) {
String status = entry.getValue() ? "成功" : "失败";
System.out.println(entry.getKey() + ": " + status);
}disconnect
public void disconnect(String terminalId) throws Exception断开指定终端的连接。
参数:
terminalId(String) - 要断开的终端ID
示例:
sdk.disconnect("terminal-1");disconnectAll
public void disconnectAll()断开所有终端的连接。
示例:
sdk.disconnectAll();sendSignal
public void sendSignal(String terminalId, Signal signal) throws SendException向指定终端发送信号。
参数:
terminalId(String) - 目标终端IDsignal(Signal) - 要发送的信号对象
异常:
SendException- 发送失败时抛出
示例:
Signal signal = new Signal("sensor.data");
signal.getPayload().setNumber("temperature", 25.5);
sdk.sendSignal("terminal-1", signal);sendAudioData
public void sendAudioData(String terminalId, byte[] audioData) throws SendException向指定终端发送 OPUS 格式的音频数据。
参数:
terminalId(String) - 目标终端IDaudioData(byte[]) - OPUS 格式的音频二进制数据
异常:
SendException- 发送失败时抛出
示例:
byte[] audioData = Files.readAllBytes(Paths.get("audio.opus"));
sdk.sendAudioData("terminal-1", audioData);setDirectiveCallback
public void setDirectiveCallback(String terminalId, DirectiveCallback callback)设置接收指令的回调函数。
参数:
terminalId(String) - 终端IDcallback(DirectiveCallback) - 回调接口实现
回调接口:
public interface DirectiveCallback {
void onDirective(Directive directive);
}示例:
sdk.setDirectiveCallback("terminal-1", new DirectiveCallback() {
@Override
public void onDirective(Directive directive) {
System.out.println("收到指令: " + directive.getName());
Payload payload = directive.getPayload();
// 处理指令...
}
});
// 使用 Lambda (Java 8+)
sdk.setDirectiveCallback("terminal-1", directive -> {
System.out.println("收到指令: " + directive.getName());
});setConnectionCallback
public void setConnectionCallback(String terminalId, ConnectionCallback callback)设置连接状态变化的回调函数。
参数:
terminalId(String) - 终端IDcallback(ConnectionCallback) - 回调接口实现
回调接口:
public interface ConnectionCallback {
void onConnectionChange(String status, String message);
}状态值:
"connected"- 已连接"disconnected"- 已断开"reconnecting"- 重连中"error"- 错误
示例:
sdk.setConnectionCallback("terminal-1", new ConnectionCallback() {
@Override
public void onConnectionChange(String status, String message) {
if ("connected".equals(status)) {
System.out.println("连接成功");
} else if ("disconnected".equals(status)) {
System.out.println("连接断开: " + message);
} else if ("reconnecting".equals(status)) {
System.out.println("正在重连: " + message);
} else if ("error".equals(status)) {
System.out.println("连接错误: " + message);
}
}
});
// 使用 Lambda (Java 8+)
sdk.setConnectionCallback("terminal-1", (status, message) -> {
System.out.println("状态: " + status + ", 消息: " + message);
});完整示例
import com.streamind.sdk.*;
import com.streamind.sdk.callbacks.*;
import java.nio.file.Files;
import java.nio.file.Paths;
public class SDKExample {
public static void main(String[] args) {
// 创建SDK
SDK sdk = new SDK();
// 创建配置
Config config = new Config.Builder()
.deviceId("device-001")
.deviceType("sensor")
.endpoint("wss://your-platform.com/signals")
.tenantId("your-tenant-id")
.productId("your-product-id")
.productKey("your-secret-key")
.build();
// 注册终端
sdk.registerTerminal("terminal-1", config);
// 设置回调
sdk.setDirectiveCallback("terminal-1", directive -> {
System.out.println("指令: " + directive.getName());
});
sdk.setConnectionCallback("terminal-1", (status, message) -> {
System.out.println("状态: " + status + ", " + message);
});
try {
// 连接
sdk.connect("terminal-1");
// 发送信号
Signal signal = new Signal("sensor.data");
signal.getPayload().setNumber("value", 25.5);
sdk.sendSignal("terminal-1", signal);
// 发送音频
byte[] audioData = Files.readAllBytes(Paths.get("audio.opus"));
sdk.sendAudioData("terminal-1", audioData);
// 保持连接
Thread.sleep(60000);
// 断开连接
sdk.disconnect("terminal-1");
} catch (Exception e) {
e.printStackTrace();
}
}
}线程安全
SDK 类不是线程安全的。如果需要在多线程环境中使用,请为每个线程创建独立的 SDK 实例,或使用适当的同步机制。
最佳实践
- 单一 SDK 实例 - 在应用中使用单个 SDK 实例管理所有终端
- 错误处理 - 始终使用 try-catch 包裹连接和发送操作
- 优雅关闭 - 应用退出前调用
disconnectAll() - 回调轻量 - 回调函数中避免阻塞操作
- 资源管理 - 确保正确释放资源
Last updated on