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();
}
Copyright © 2023-2024 IDO. All rights reserved. all right reserved,powered by Gitbook修订时间: 2026-04-07 16:03:39

results matching ""

    No results matching ""