uni-app iBeacon API无法扫描附近标签
uni-app iBeacon API无法扫描附近标签
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win11 10.0.26100 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.45
手机系统:Android
手机系统版本号:Android 14
手机厂商:荣耀
手机机型:200 Pro
页面类型:vue
vue版本:vue3
打包方式:离线
项目创建方式:HBuilderX
操作步骤:
<template>
<view class="container">
<button @click="initBeacon">启动扫描</button>
</view>
</template>
<script setup>
import {
ref,
onUnmounted
} from 'vue'
const beaconList = ref([])
let intervalId = null
const initBeacon = async () => {
try {
await uni.openBluetoothAdapter()
uni.onBeaconUpdate(res => {
console.log(res);
beaconList.value = res.beacons.map(parseBeaconData)
})
startScanning()
} catch (err) {
console.error(' 初始化失败:', err)
}
}
const parseBeaconData = (raw) => ({
uuid: raw.uuid,
major: parseInt(raw.major),
minor: parseInt(raw.minor),
rssi: raw.rssi,
distance: (10 ** ((-59 - raw.rssi) / (10 * 2))).toFixed(2) + 'm',
lastUpdate: new Date().toLocaleTimeString()
})
const startScanning = () => {
uni.startBeaconDiscovery({
uuids:['fda50693-a4e2-4fb1-afcf-c6eb07647825','fda50693-a4e2-4fb1-afcf-cbeb07647825'],
success: (res) => {
intervalId = setInterval(fetchUpdate, 500)
}
})
}
const fetchUpdate = () => {
uni.getBeacons({
success: res => {
beaconList.value = res.beacons.map(parseBeaconData)
// console.log('设备列表',res);
}
})
}
onUnmounted(() => {
clearInterval(intervalId)
uni.stopBeaconDiscovery()
})
</script>
预期结果:
预期结果为与小程序一样扫描到附近所有的beacon标签
实际结果:
只能扫描到一种标签
更多关于uni-app iBeacon API无法扫描附近标签的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app iBeacon API无法扫描附近标签的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据提供的代码和问题描述,以下是可能的原因和解决方案:
- 权限问题:
- 确保已在manifest.json中配置蓝牙相关权限:
"permission": {
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
}
- 设备兼容性问题:
- 荣耀200 Pro可能存在蓝牙扫描限制,建议测试其他安卓设备确认是否为设备特定问题
- UUID过滤问题:
- 当前代码只扫描两个特定UUID的设备,确认附近其他beacon是否使用相同的UUID
- 可以尝试注释掉uuids参数进行全扫描:
uni.startBeaconDiscovery({
// uuids:['...'],
success: (res) => {
intervalId = setInterval(fetchUpdate, 500)
}
})
- 扫描间隔优化:
- 500ms的扫描间隔可能过短,建议调整为1000-2000ms
- 确保在onUnmounted中正确清理资源
- 日志补充:
- 在startBeaconDiscovery和getBeacons的fail回调中添加错误日志:
uni.startBeaconDiscovery({
fail: err => console.error('扫描失败:', err)
})