Ошибка элемента не найдена в StreamSocket.ConnectAsync()

Я застрял на много часов сейчас, пытаясь связаться с устройством Bluetooth (не BLE).

Я использую приложение Windows Phone 8.1 Silverlight.

Я установил раздел DeviceCapability с помощью serviceid в appxmanifest:

<!-- bluetooth -->
<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="any">

    <m2:Function Type="serviceId:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
  </m2:Device>
</m2:DeviceCapability>

Я включил ID_CAP_PROXIMITY и ID_CAP_NETWORKING в WPAppManifest и близость в appxmanifest.

Я искал свое устройство двумя возможными способами (и каждый раз получал PeerInformation), либо с парным фильтром, либо с serviceid:

        if(serviceId.HasValue)
        {
            // Filter devices with serviceId
            PeerFinder.AlternateIdentities["Bluetooth:SDP"] = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}";
        }
        else
        {
            // Filter devices (all paired)
            PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
        }

        // Search
        var peers = await PeerFinder.FindAllPeersAsync();
        // Make some filtering to get right PeerInformation
        var peer = GetGoodPeerInformation();

Когда я пытаюсь записать данные на свое устройство, появляется сообщение об ошибке "Элемент не найден":

try
        {
            //PeerFinder.Start();

            //using (var streamSocket = await PeerFinder.ConnectAsync(Peer))
            using (var streamSocket = new StreamSocket())
            {
                // I have to put manually the serviceid because the ServiceId property in the PeerInformation object is always empty...
                await streamSocket.ConnectAsync(PeerInformation.HostName, "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}");
                // data is a byte[] filled earlier
                await streamSocket.OutputStream.WriteAsync(data.AsBuffer());
            }

            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            //PeerFinder.Stop();
        }

Когда я удаляю фигурные скобки из ServiceId в ConnectAsync(), у меня появляется другая ошибка (неверное имя файла 0x8007007B).

Если у вас есть идеи, спасибо за помощь!

[Редактировать: 04.06.2015]

Я протестировал приложение WinRT (WP 8.1) и успешно подключился к своему устройству, изменив способ его выполнения:

var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(new Guid("00001101-0000-1000-8000-00805F9B34FB"))));

        var device = devices.First();

        var service = await RfcommDeviceService.FromIdAsync(device.Id);

        byte[] data = new byte[] { 0xB0, 0x11, 0x11, 0x01, 0xAA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6 };

        try
        {
            using (StreamSocket socket = new StreamSocket())
            {
                await socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
                await socket.OutputStream.WriteAsync(data.AsBuffer());
            }
        }
        catch (Exception)
        {
            throw;
        }

Итак, я переместил этот кусок кода в свое приложение WP8.1 Silverlight, но служба переменных всегда равна нулю...

0 ответов

Другие вопросы по тегам