问题描述
我编写了一个在 HoloLens 2 上提供蓝牙 RFCOMM 服务的应用程序。如果不使用设置应用程序,我是否可以让 HoloLens2 被任何正在寻找该服务的设备发现?我不想强迫用户使用设置应用程序只是为了配对设备。我一直无法找到任何可以让我使用自己的应用程序控制设备可发现性的东西。这在 UWP 中甚至可能吗?
解决方法
可通过调用启动可发现模式:
rfcommServiceProvider.StartAdvertising(streamSocketListener,true);
可以在 Microsoft 提供的 RFCOMM 示例中找到工作示例。 Sample
完整代码:
var rfcommServiceProvider = await RfcommServiceProvider.CreateAsync(RfcommServiceId.FromUuid(Constants.RfcommServiceUuid));
//
//Initialize SDP Attributes here
//
var listener = new StreamSocketListener();
var rfcommID = rfcommServiceProvider.ServiceId.AsString();
await listener.BindServiceNameAsync(rfcommID,SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);
try
{
rfcommServiceProvider.StartAdvertising(listener,true);
listener.ConnectionReceived += Listener_ConnectionReceived;
Debug.WriteLine("Now Discoverable");
}
catch
{
Debug.WriteLine("Failed to set Discoverability.");
}
,
您的 HoloLens 2 应该可以被发现,而无需先配对。您能否运行 RFCOMM 聊天示例 (Bluetooth RFCOMM chat sample) 的客户端部分并查看您的 HoloLens 2 设备是否被枚举?
要使设备可被发现,应用程序需要调用 RfcommServiceProvider.StartAdvertising,并将 radioDicoverable 设置为 true。 RFCOMM 聊天示例在前台服务器中执行此操作,并且在前台服务器运行时可发现,但在后台服务器中无法发现,因此仅在后台服务器运行时无法发现。