如何将 BLE 广告从 Android 发送到 HoloLens v2 上的 Unity

How to send BLE advertisements from Android to Unity on HoloLens v2

我已经成功地使用 BLE 广告从一台 android 设备广播信息并在另一台设备上接收。现在我希望观察者成为 HoloLens v2 上的 Unity-app 运行。 HoloLens 不需要连接到 android-设备,因为我知道 this does not seem to be supported。我正在寻找广播公司 -> 观察员解决方案。

如前所述,我已经编写了广播器,它可以与 android -> android 一起正常工作。现在我已经在 Unity 中实现了我的观察者,很大程度上受到 this article 的启发,它看起来像这样:

#if ENABLE_WINMD_SUPPORT
using System;
using Windows.Devices.Bluetooth.Advertisement;
#endif

public class DemoManager : MonoBehaviour
{

    [SerializeField] private StatusDisplay statusDisplay;


    private void Awake()
    {
#if ENABLE_WINMD_SUPPORT
        StartWatcher();
#else
        statusDisplay.Display("UWP APIs are not supported on this platform!");
#endif
    }

#if ENABLE_WINMD_SUPPORT
    private void StartWatcher()
    {
        void OnAdvertisementReceived(object sender, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
        {
            statusDisplay.Display("Advertisement received!");
        }

        try {
            BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
            watcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(GetManufacturerData());
            watcher.Received += OnAdvertisementReceived;
            watcher.Start();
            
            statusDisplay.Display("Watcher started!");
        } catch (Exception e){
            statusDisplay.Display($"Watcher could not start! Error: {e.Message}");
        }
    }

    private BluetoothLEManufacturerData GetManufacturerData()
    {
        var manufacturerData = new BluetoothLEManufacturerData();
        manufacturerData.CompanyId = 1234;

        return manufacturerData;
    }
#endif

}

StatusDisplay 脚本用于以线程安全的方式显示文本。 company-id 1234 也被广播公司使用。

我的应用程序具有蓝牙功能(在 Unity 编辑器和构建的解决方案中启用)

一切看起来都很有希望,但遗憾的是广告似乎从未收到,或者至少我没有收到相应的状态消息。

有没有人有任何 ide 可能出错的地方?有没有人遇到过这个问题?

我们测试了 Bluetooth.Advertisement API 并且在 HoloLens 上运行良好。我发现您为 CompanyId(一个 16 位无符号整数)属性 分配了一个带符号的十进制数,但我们通常提供一个十六进制数作为蓝牙 LE 公司标识符代码。你能在你的观察者和发布者中仔细检查这一点吗?例如,它应该看起来像 0xFFFE。此外,有关如何使用蓝牙广告API发送和接收蓝牙低功耗广告的更多信息,请参阅:Bluetooth advertisement sample

问题不在 Unity 端。我的广告格式不正确。我用一个观察者测试了我的广告,我也在 Android 上写了自己。所以我解释了那里的格式不正确,但当然,C# Advertisement-watcher 没有。