You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fdp eab05419d6 修改ble通信 1 year ago
..
android 修改ble通信 1 year ago
lib 接通翻译 1 year ago
README.md add 2 years ago
pubspec.yaml add 2 years ago

README.md

Jieli 插件

一个用于连接杰理蓝牙耳机的Flutter插件,支持Android 12+的BLE通信。

功能

  • 扫描支持特定BLE服务的耳机设备
  • 连接设备并发现服务
  • 接收耳机的唤醒通知
  • 向耳机发送控制命令启动录音
  • 接收音频数据流

技术规范

此插件实现了以下BLE特性:

  • 服务UUID: 0000A100-0000-1000-8000-00805F9B34FB
  • 音频数据特征UUID: 0000A101-0000-1000-8000-00805F9B34FB
  • 控制特征UUID: 0000A102-0000-1000-8000-00805F9B34FB

使用方法

初始化插件

final jieli = Jieli();

检查蓝牙状态

bool isEnabled = await jieli.isBluetoothEnabled();
if (!isEnabled) {
  await jieli.requestBluetoothEnable();
}

扫描设备

// 监听扫描结果
jieli.scanResults.listen((devices) {
  // 处理扫描到的设备列表
  for (var device in devices) {
    print('发现设备: ${device.name} (${device.id}), RSSI: ${device.rssi}');
  }
});

// 开始扫描,10秒后自动停止
await jieli.startScan(scanTimeout: 10000);

// 手动停止扫描
await jieli.stopScan();

连接设备

// 监听连接状态
jieli.connectionState.listen((state) {
  switch (state) {
    case ConnectionState.connected:
      print('设备已连接');
      break;
    case ConnectionState.disconnected:
      print('设备已断开');
      break;
    case ConnectionState.connecting:
      print('正在连接...');
      break;
    case ConnectionState.disconnecting:
      print('正在断开...');
      break;
    case ConnectionState.error:
      print('连接错误');
      break;
  }
});

// 连接到设备
await jieli.connect(deviceId);

// 断开连接
await jieli.disconnect();

接收唤醒信号

// 监听唤醒信号
jieli.wakeupStream.listen((wakeup) {
  print('收到唤醒信号');
  // 通常在收到唤醒后自动发送开始录音命令
});

发送录音命令

// 发送开始录音命令
await jieli.sendStartRecordingCommand();

// 发送停止录音命令
await jieli.sendStopRecordingCommand();

接收音频数据

// 监听音频数据流
jieli.audioDataStream.listen((data) {
  print('收到音频数据: ${data.length} 字节');
  // 处理音频数据
});

资源清理

// 在不再需要插件时释放资源
await jieli.dispose();

权限

使用此插件需要以下Android权限:

  • Android 12+ (API 31+): BLUETOOTH_SCAN, BLUETOOTH_CONNECT
  • Android 11及以下: BLUETOOTH, BLUETOOTH_ADMIN

插件会在需要时自动请求权限,但建议在应用清单文件中声明这些权限:

<!-- 针对 Android 11 及以下的传统蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH"
                 android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
                 android:maxSdkVersion="30" />

<!-- Android 12+ 新的 BLE 扫描和连接权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                 android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />