如何在 Unity3D HoloLens 应用程序上检测 BLE 信标?

How to detect BLE beacons on Unity3D HoloLens app?

我在 Unity3D 中构建了一个应用程序,它应该能够检测 Microsoft HoloLens 上的蓝牙低功耗信标。这是我用来完成此操作的 Unity C# 脚本代码。

using UnityEngine;
using Windows.Devices.Bluetooth.Advertisement;

public class BeaconDetector : MonoBehaviour
{

    private BluetoothLEAdvertisementWatcher _watcher;

    void Start()
    {
        _watcher = new BluetoothLEAdvertisementWatcher();
        _watcher.Received += WatcherOnReceived;
        _watcher.Start();
    }

    //This method should be called when a beacon is detected
    void WatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
    {
        //Just a simple check if this method is even called
        Debug.Log("Beacon detected!");
    }

}

该应用程序在 HoloLens 上构建和运行得很好,但是(即使等待了几分钟)我在调试日志中没有得到所需的输出行。这对我来说意味着永远不会调用 WatcherOnReceived() 方法,最终 意味着没有检测到信标

我使用一些 Sensoro SmartBeacon-4AA,它可以传输 iBeacon 和 Eddystone 信号。

我已经尝试了几个星期,一路上做了几个教程,但我仍然不明白为什么这对我不起作用。

毕竟是权限问题。可以在 Unity(预构建)和 Visual Studio(post-构建)中解决此问题。以下是两种解决方案:

解决方案 A:在 Unity 中

  1. 前往编辑 > 项目设置 > 播放器
  2. 检查器 中,打开选项卡 发布设置
  3. 功能部分下,确保蓝牙已启用

单击 .gif 展开

解决方案 B:在 Visual Studio (2017)

  1. 在您的解决方案资源管理器 (Ctrl+Alt+L) 中,展开您的项目。
  2. 双击 Package.appxmanifest.
  3. 转到功能 选项卡。
  4. 再次确保蓝牙已启用

单击 .gif 展开

这将使您的应用有权在 HoloLens 上使用蓝牙。