更新记录
1.0.1(2024-09-16)
调整为数据发送默认16进制字符串模式
接收为16进制字符串
1.0.0(2024-09-16)
初始版本
平台兼容性
uni-app
app-vue |
app-nvue |
app-android |
app-ios |
app-harmony |
? |
? |
? |
? |
? |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
? |
? |
? |
? |
? |
? |
? |
? |
? |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
? |
? |
? |
? |
? |
? |
? |
? |
? |
uni-app x
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
? |
? |
? |
? |
? |
? |
? |
? |
? |
bluetooth-manager uni-APi插件
- 支持异常断开检测,断开,连接,扫描,配置连接服务uuid(默认串口服务uuid),重复连接检测, 数据发送,接收
- 理论支持vue2 未实验
- 理论支持多台设备连接 手头设备有限 未实验
- 有问题反馈就处理
- uni-app uni-app-x
数据类型
type Device = {
name: string;
address: string;
rssi: number,
};
API接口说明
initBluetoothAdapter(options: {
success?: () => void;
fail?: (res: ApiFailImpl) => void;
complete?: () => void;
}): void;
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"/>