<template>
<view class="container">
<button @click="initBeacon">启动扫描</button>
<view v-for="(item, index) in beaconList" :key="index" class="beacon-card">
<view class="uuid">{{ item.uuid }}</view>
<view class="meta">
<view>Major: {{ item.major }}</view>
<view>Minor: {{ item.minor }}</view>
<view>距离: {{ item.distance }}</view>
</view>
<view class="status">
<view>信号强度: {{ item.rssi }}dBm</view>
<view>更新时间: {{ item.lastUpdate }}</view>
</view>
</view>
</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>
<style lang="scss">
</style>
0 个回复