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


根据提供的代码和问题描述,以下是可能的原因和解决方案:

  1. 权限问题:
  • 确保已在manifest.json中配置蓝牙相关权限:
"permission": {
    "android.permission.BLUETOOTH",
    "android.permission.BLUETOOTH_ADMIN",
    "android.permission.ACCESS_COARSE_LOCATION",
    "android.permission.ACCESS_FINE_LOCATION"
}
  1. 设备兼容性问题:
  • 荣耀200 Pro可能存在蓝牙扫描限制,建议测试其他安卓设备确认是否为设备特定问题
  1. UUID过滤问题:
  • 当前代码只扫描两个特定UUID的设备,确认附近其他beacon是否使用相同的UUID
  • 可以尝试注释掉uuids参数进行全扫描:
uni.startBeaconDiscovery({
    // uuids:['...'],
    success: (res) => {
        intervalId = setInterval(fetchUpdate, 500)
    }
})
  1. 扫描间隔优化:
  • 500ms的扫描间隔可能过短,建议调整为1000-2000ms
  • 确保在onUnmounted中正确清理资源
  1. 日志补充:
  • 在startBeaconDiscovery和getBeacons的fail回调中添加错误日志:
uni.startBeaconDiscovery({
    fail: err => console.error('扫描失败:', err)
})
回到顶部