更新记录
1.0.4(2025-03-21)
修复IOS 添加service 重复问题
1.0.3(2025-03-21)
修复IOS 添加重复service问题
1.0.2(2025-03-20)
修复Android bug
查看更多平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.25,Android:5.0,iOS:10,HarmonyNext:不确定 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
支持平台:IOS,Android 权限:
Android
<!-- 蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- Android 12及以上版本需要的蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- 定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
IOS
<key>NSBluetoothAlwaysUsageDescription</key>
<string>App需要使用蓝牙进行设备连接</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要使用蓝牙进行设备连接</string>
<!-- 定位权限 -->
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>App需要使用定位来搜索附近的蓝牙设备</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要使用定位来搜索附近的蓝牙设备</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要使用定位来搜索附近的蓝牙设备</string>
<!-- 后台蓝牙权限 -->
<key>UIBackgroundModes</key>
导入插件
import { BlePeripheralModule } from '@/uni_modules/qy-bleperipheral';
使用插件(详情请参考demo)
const bleModule = new BlePeripheralModule() // 创建插件
bleModule.initWithCallback({ // 初始化插件
onBluetoothStateChange(enabled : boolean) { // 蓝牙初始化状态
isBluetoothOn.value = enabled
console.log('蓝牙状态:', enabled)
},
onAdvertisingStateChange(advertising : boolean) { // 广播状态
isAdvertising.value = advertising
console.log('广播状态:', advertising)
},
onConnectionStateChange(id : string, status : boolean) { // id 设备ID, status 连接状态(IOS 中无法监听)
console.log('连接状态:', id, status)
},
onSubscribed(status : boolean) { // 订阅状态
console.log('订阅状态:', status)
},
onWrite(data : number[]) { // 中心设备发来的数据回调
console.log('onWritestr:', data);
// const packet = new Uint8Array(data);
// let str2 = String.fromCharCode.apply(null, packet);
},
onError: (error : number) => { // 错误回调
console.log('错误代码:', error)
},
initCharacteristic: [{ // 初始化服务和特征值
serviceUUID: SERVICE_UUID,
characteristicUUIDs: [CHAR_UUID]
}]
})
bleModule.startAdvertising([0x01, 0x02, 0x03], 'mybleConfig') // 发射广播(广播数据,广播名称)
bleModule.stopAdvertising() // 停止广播
bleModule.notifyValue(SERVICE_UUID, CHAR_UUID, paramsData) // notify数据()
注意事项(在页面生命周期中最好调用一下如下代码,确定蓝牙是否可用,成功后再初始化,避免出错)
uni.openBluetoothAdapter({
success(res) {
console.log(res)
}
})