如何将 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 没有。
我已经成功地使用 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 没有。