IDO SDK
文件本地引入
pubspec.yaml
protocol_lib:
path: <file relative path>
protocol_alexa:
path: <file relative path>
flutter_bluetooth:
path: <file relative path>
SDK 初始化
void main() async{
await registerProtocolSDK();
await registerBluetoothSDK();
await registerProtocolAlexa();
await bridgeConnect();
}
///注册协议库
registerProtocolSDK() async {
// 注册协议库
await IDOProtocolLibManager.register(outputToConsole: true);
// ios注册监听更新消息图标
libManager.messageIcon.registerListenUpdate();
// 监听设备状态
libManager.listenDeviceNotification((event) {
print('listenDeviceNotification: ${event.toMap().toString()}');
});
}
///注册蓝牙库
registerBluetoothSDK() async {
await bluetoothManager.register();
/// 获取版本号
final version = bluetoothManager.getSdkVersion();
}
///注册Alexa
///注意:IDOProtocolAlexa依赖协议库, 其注册需写在协议库注册之后
registerProtocolAlexa() async {
final clientId = "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
await IDOProtocolAlexa.registerAlexa(clientId: clientId);
}
/// 蓝牙与协议库桥接
bridgeConnect() async {
// 处理蓝牙返回数据
bluetoothManager.receiveData().listen((event) {
if (event.data != null) {
libManager.receiveDataFromBle(event.data!, event.macAddress, event.spp ?? false ? 1 : 0);
}
});
/// 监听协议库状态改变
libManager.listenStatusNotification((status) async {
if (status == IDOStatusNotification.protocolConnectCompleted) {
/// 协议库设备连接完成初始化
} else if (status == IDOStatusNotification.fastSyncCompleted) {
/// 快速配置完成
/// 保存设备信息,安卓bt配对
bluetoothManager.setPair();
} else if (status == IDOStatusNotification.deviceInfoUpdateCompleted) {
/// 设备信息更新完成
} else if (status == IDOStatusNotification.unbindOnBindStateError) {
/// 绑定状态错误,解绑删除当前设备
} else if (status == IDOStatusNotification.fastSyncFailed) {
/// 快速配置失败,功能表获取失败
/// 保存设备信息,安卓bt配对 ,下次同步时候继续快速配置直至成功
bluetoothManager.setPair();
}
});
// 写数据到蓝牙设备
IDOBluetoothWriteType rs = IDOBluetoothWriteType.withoutResponse;
libManager.registerWriteDataToBle((event) async {
rs = await bluetoothManager.writeData(event.data, type: event.type);
if (rs == IDOBluetoothWriteType.withoutResponse && Platform.isIOS) {
/// 无响应发送数据
libManager.writeDataComplete();
}
});
// 蓝牙写入状态回调
bluetoothManager.writeState().listen((event) {
if (event.state ?? false) {
if (Platform.isAndroid ||
event.type == IDOBluetoothWriteType.withResponse) {
/// 写入完成
libManager.writeDataComplete();
}
}
});
//监听连接状态
bluetoothManager.deviceState().listen((value) async {
if (value.errorState == IDOBluetoothDeviceConnectErrorType.pairFail) {
// 配对异常提示去忽略设备
}
if ((value.state == IDOBluetoothDeviceStateType.connected &&
(value.macAddress != null && value.macAddress!.isNotEmpty))) {
// 设备连接成功
/// 获取ota枚举类型
final isTlwOta = bluetoothManager.currentDevice?.isTlwOta ?? false
final isOta = bluetoothManager.currentDevice?.isOta ?? false
final otaType = isTlwOt ? IDOOtaType.telink : isOta ? IDOOtaType.nordic : IDOOtaType.none;
/// 获取设备名字
final devicenName = bluetoothManager.currentDevice?.name;
/// 获取设备uuid(只有ios)
final uuid = bluetoothManager.currentDevice?.uuid;
/// 执行协议库连接设备
libManager.markConnectedDevice(
macAddress: value.macAddress!,
otaType: otaType,
isBinded: deviceList != null,
deviceName: devicenName,
uuid: uuid);
} else if (value.state == IDOBluetoothDeviceStateType.disconnected) {
// 设备断线
await libManager.markDisconnectedDevice(
macAddress: value.macAddress, uuid: value.uuid);
}
});
/// 监听蓝牙状态
bluetoothManager.bluetoothState().listen((event) async {
/// 获取设备mac地址
final macAddress = bluetoothManager.currentDevice?.macAddress;
/// 获取设备uuid(只有ios)
final uuid = bluetoothManager.currentDevice?.uuid;
if (event.state == IDOBluetoothStateType.poweredOff) {
/// 蓝牙关闭
await libManager.markDisconnectedDevice(macAddress: macAddress,uuid: uuid);
}
});
}
Alexa 接口使用
/// Alexa使用示例
useAlexa() {
// 切换语言 (可选,默认英语)
IDOProtocolAlexa.changeLanguage(AlexaLanguageType.usa);
// 设置代理
IDOProtocolAlexa().delegate = <IDOAlexaDelegate>;
// 添加监听
IDOProtocolAlexa().listenLoginStateChanged((state) {
// 登录状态变更
});
// 登录alexa
// productId 在alexa后台注册的产品ID
// func 回调,Alexa认证需要打开的url和userCode
IDOProtocolAlexa().authorizeRequest(
productId: 'productId',
func: (userCode, url) {
// userCode为alexa登录需要使用的验证码
// url 跳转alexa官方登录地址
// 添加打开webView并打开url的相关代码
}).then((rs) {
if (rs == LoginResponse.successful) {
print('登录成功');
} else {
print('登录失败 $rs');
}
});
// 取消登录请求
IDOProtocolAlexa().stopLogin();
// 退出alexa登录
IDOProtocolAlexa().logout();
}
蓝牙库接口使用
useBluetooth() {
/// 当前连接的设备
/// last connected device
final device = bluetoothManager.currentDevice;
/// 开始搜索
/// macAddress(Android):根据Mac地址搜索
/// 返回指定搜索的设备,如未指定返回null
/// start searching
/// macAddress(Android):Search by macAddress
/// Returns the specified search device, or null if not specified
bluetoothManager.startScan();
/// 停止搜索
/// stop searching
bluetoothManager.stopScan();
/// 搜索结果
/// deviceName: 只搜索deviceName的设备
/// deviceID:只搜索deviceID的设备
/// search results
/// deviceName: Only search devices with deviceName
/// deviceID:Only search for devices with deviceID
bluetoothManager.scanResult(deviceNames,deviceIDs,macAddresss,uuids).listen((event) {
});
/// 监听设备状态状态
/// Monitor device status status
bluetoothManager.deviceState().listen((event) {
});
/// 监听蓝牙状态
/// Monitor Bluetooth status
bluetoothManager.bluetoothState().listen((event) {
});
/// 扫描列表选择连接
bluetoothManager.connect(device);
/// 使用这个重连设备
/// Use this to reconnect the device
bluetoothManager.needAutoConnect(true);
bluetoothManager.autoConnect(device);
/// 取消连接
/// cancel connection
bluetoothManager.cancelConnect();
/// 获取蓝牙状态
/// get bluetooth status
final bluetoothState = await getBluetoothState();
/// 获取设备连接状态
/// Get device connection status
final deviceState = await getDeviceState();
/// bt配对(android)
/// bt pairing (android)
bluetoothManager.setBtPair(device);
/// 取消配对(android)
/// unpair (android)
bluetoothManager.cancelPair();
/// 发送数据
/// data:数据
/// device: 发送数据的设备
/// type:0 BLE数据, 1 SPP数据
/// send data
/// data: data
/// device: device sending data
/// type:0 BLE data, 1 SPP data
bluetoothManager.writeData(data,device,type).listen;
/// 发送数据状态
/// Send data status
bluetoothManager.writeState(device).listen;
/// 收到数据
/// received data
bluetoothManager.receiveData(device).listen;
/// 连接SPP(android)
/// Connect to SPP (android)
bluetoothManager.connectSPP(btMacAddress);
/// btMacAddress 断开SPP(android)
/// btMacAddress disconnect SPP (android)
bluetoothManager.disconnectSPP(btMacAddress);
/// 发起dfu升级 (nordic 升级)
/// Initiate dfu upgrade
bluetoothManager.startNordicDFU(config);
/// 监听dfu进度,外部调用
/// progress: 进度
/// state: Completed升级完成
/// error: 不为空就是错误
/// Monitor dfu progress, external call
/// progress: progress
/// state: 'Completed' Upgrade completed
/// error: error
bluetoothManager.dfuProgress().listen((event) {
if (event['progress'] != null
&& event['progress'] is int) { /// 进度
final progress = event['progress'] as int;
} else if (event['state'] != null &&
event['state'] is String &&
event['state'] == 'Completed') { /// 升级完成
} else if (event['error'] != null
&& event['error'] is String) { /// 升级错误
final error = event['error'] as String;
}
});
/// 日志路径
/// log path
bluetoothManager.logPath();
}