找不到Windows Phone Silverlight 8.1蓝牙应用程序到设备元素的异常

本文关键字:元素 异常 应用程序 Phone Windows Silverlight 找不到 | 更新日期: 2023-09-27 18:22:00

我正试图从我的windows Phone silverlight 8.1应用程序连接到蓝牙打印机,但我在_socket.ConnectAsync()方法中遇到以下异常

{System.Exception: Element not found. (Exception from HRESULT: 0x80070490)
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at PhoneApp1.MainPage.<ConnectToDevice>d__4.MoveNext()}

我的应用程序正在BLUEBIRD Windows 8.1手持设备上运行。我的代码看起来像

        _socket = new StreamSocket();
        await _socket.ConnectAsync(peer.HostName ,"1" );

我启用了internetClientServer和邻近功能

相同的代码适用于针对Windows Phone 8 的应用程序

找不到Windows Phone Silverlight 8.1蓝牙应用程序到设备元素的异常

我终于找到了这个问题的解决方案。主要目标是在ConnectAsync方法中的第二个参数(服务名称),它向应用程序说明设备支持哪个服务(类似于TCP端口)。当你对通信的两侧进行编程时,你只需在两侧加上一些数字,但大多数硬件设备都内置了自己的服务。所以你需要知道你的硬件支持哪个服务ID,但对于大多数像打印机这样的设备来说,它是serialPort。因此,您需要使用不同的方法来搜索填充对等设备的设备。ServiceName,然后使用服务名称连接。

这是msdn手册中针对Windows手机蓝牙的真正错误,只是简单地将1表示为serviceName。

最后,您必须手动为特定服务设置功能,如以下所示:

<m2:DeviceCapability Name="bluetooth.rfcomm">
   <m2:Device Id="any">
       <m2:Function Type="serviceId:00001101-0000-1000-8000-00805f9b34fb" />
   </m2:Device>
</m2:DeviceCapability>

您的对等查找器必须像这样初始化

PeerFinder.AlternateIdentities["Bluetooth:SDP"] = "{00001101-0000-1000-8000-00805f9b34fb}";

关于如何搜索同行和连接设备,您只需要了解这个美丽的博客。

http://dream-forever.net/Blog/2013/11/28/using-bluetooth-in-windows-phone-8/

此外,您可能需要使用其他服务,列表如下:

http://msdn.microsoft.com/en-US/library/windows/apps/dn263090