更新记录

1.0.2(2024-09-20)

扫描和连接设备时自动请求权限 构建 targetSdkVersion 建议 34

测试需要自定义基座打包权限

1.0.1(2024-09-16)

调整为数据发送默认16进制字符串模式 接收为16进制字符串

1.0.0(2024-09-16)

初始版本

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 4.23,Android:6.0,iOS:不支持,HarmonyNext:不确定 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

bluetooth-manager uni-APi插件

  • android 6 至 android 14
  • 支持异常断开检测,断开,连接,扫描,配置连接服务uuid(默认串口服务uuid),重复连接检测, 数据发送,接收
  • 理论支持vue2 未实验
  • 理论支持多台设备连接 手头设备有限 未实验
  • 有问题反馈就处理
  • uni-app uni-app-x

权限

<!-- Android 12以下配置的三个蓝牙权限 -->
<!-- 这个权限允许程序连接到已配对的蓝牙设备, 请求连接/接收连接/传输数据需要改权限, 主要用于对配对后进行操作 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />

<!-- 这个权限允许程序发现和配对蓝牙设备, 该权限用来管理蓝牙设备, 有了这个权限, 应用才能使用本机的蓝牙设备, 主要用于对配对前的操作 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />

<!-- Android 6.0以后,12.0以下,这两个权限是必须的,蓝牙扫描周围的设备需要获取模糊的位置信息。这两个权限属于同一组危险权限,在清单文件中声明之后,还需要再运行时动态获取。 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Android 12以下配置的两个蓝牙权限 -->

<!-- Android 12 及以上版本配置的三个权限 -->
<!-- 您的应用查找蓝牙设备时添加 -->
<uses-permission
        android:name="android.permission.BLUETOOTH_SCAN"
        android:usesPermissionFlags="neverForLocation"
        tools:targetApi="s" />

<!-- 应用程序使手机蓝牙可被其它蓝牙设备发现时才需要-->
<!--     <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> -->

<!-- 仅应用程序与已配对的蓝牙设备通信时才需要 -->
<uses-permission
        android:name="android.permission.BLUETOOTH_CONNECT"
        tools:targetApi="s" />
<!-- Android 12 及以上版本配置的三个权限 -->

数据类型

type Device = {
  name: string;
  address: string;
  rssi: number,
};

API接口说明

  • 初始化蓝牙适配器
initBluetoothAdapter(options: {
  success?: () => void;
  fail?: (res: ApiFailImpl) => void;
  complete?: () => void;
}): void;
  • 设置扫描到设备回调(传入null可取消回调)
onScan((device: Device) => {

})
  • 设备接收到数据回调
onDataReceived((address: string, data: string) => {
  toast(address + '收到数据:' + data) // 收到数据:102030405060708090A0B0C0D0E0F0
})
  • 设备异常断开回调
onDisconnect((address: string) => {
  toast(address + '异常断开')
})
  • 连接到指定设备 (需要验证权限)
uni.showLoading()
connectToDevice({
  address: device.address,
  //uuid: "xxxx-xxxx-...", // 连接到指定服务
  success() {
    toast('连接设备成功')
    connectedDevices.value.push(device);
  },
  fail(e: any) {
    toast(e.errMsg || '连接设备失败');
    console.error(e);
  },
  complete() {
    uni.hideLoading();
  }
})
  • 断开指定设备
disconnectDevice({
  address: device.address,
  success() {
    toast('断开设备成功')
  },
  fail(e: any) {
    toast(e.errMsg || '断开设备失败')
    console.error(e);
  }
})
  • 向指定设备写入数据
writeData({
  address: device.address,
  data: '102030405060708090A0B0C0D0E0F0',
  type?: 'hex' | 'text' // 默认 hex
  success() {
    toast('发送数据成功')
  },
  fail(e: any) {
    toast(e.errMsg || '发送数据失败')
    console.error(e);
  }
})
  • 开始扫描设备 (需要验证权限)
startScanning({
  success() {
    console.log('ok')
    isScan.value = true
  },
  fail(e: any) {
    toast(e.errMsg || '失败')
    console.error(e);
  }
})
  • 停止扫描设备
stopScanning({
  success() {
    console.log('ok')
    isScan.value = false
  },
  fail(e: any) {
    toast(e.errMsg || '失败')
    console.error(e);
  }
})

主要接口类型

export type DefaultOptions = {
  success?: () => void;
  fail?: (res: ApiFailImpl) => void;
  complete?: () => void;
}

export type Device = {
  name: string;
  address: string;
  rssi: number,
}

export type ConnectToDeviceOptions = {
  address: string;
  uuid?: string;
  success?: () => void;
  fail?: (res: ApiFailImpl) => void;
  complete?: () => void;
}

export type DisconnectToDeviceOptions = {
  address: string;
  success?: () => void;
  fail?: (res: ApiFailImpl) => void;
  complete?: () => void;
}

export type WriteDataOptions = {
  address: string;
  data: string;
  success?: () => void;
  fail?: (res: ApiFailImpl) => void;
  complete?: () => void;
}

注意

  • 不会主动提示消息,错误消息需要自行在fail回调中展示e.errMsg toast(e.errMsg || '操作失败')
  • 安卓需要配置蓝牙相关权限,当前版本仅作权限检查, 未作权限动态申请,需要开发者在调用相关接口前自行检查权限并申请
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:ignore="CoarseFineLocation"/>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<!-- Android 12以下配置的三个蓝牙权限 --> <!-- 这个权限允许程序连接到已配对的蓝牙设备, 请求连接/接收连接/传输数据需要改权限, 主要用于对配对后进行操作 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <!-- 这个权限允许程序发现和配对蓝牙设备, 该权限用来管理蓝牙设备, 有了这个权限, 应用才能使用本机的蓝牙设备, 主要用于对配对前的操作 --> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- Android 6.0以后,12.0以下,这两个权限是必须的,蓝牙扫描周围的设备需要获取模糊的位置信息。 这两个权限属于同一组危险权限,在清单文件中声明之后,还需要再运行时动态获取。 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 12以下配置的两个蓝牙权限 --> <!-- Android 12 及以上版本配置的三个权限 --> <!-- 您的应用查找蓝牙设备时添加 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" tools:targetApi="s" /> <!-- 应用程序使手机蓝牙可被其它蓝牙设备发现时才需要--> <!-- <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> --> <!-- 仅应用程序与已配对的蓝牙设备通信时才需要 --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" tools:targetApi="s" /> <!-- Android 12 及以上版本配置的三个权限 -->

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问