Windows UWP Verbindung zu BLE Gerät nach Entdeckung

Ich bin mit BluetoothLEAdvertisementWatcher zu finden, in der Nähe BLE-Geräten und es funktioniert gut. Nachdem Sie zu finden, die ich verwenden möchten, verbinden und Lesen/schreiben von Daten via GATT. Aber ich kann nicht herausfinden, wie die API zu verwenden, nachdem die BluetoothLEAdvertisement (https://msdn.microsoft.com/de-de/library/windows/apps/windows.devices.bluetooth.genericattributeprofile).

public class Adapter
{
    private readonly BluetoothLEAdvertisementWatcher _bleWatcher = new BluetoothLEAdvertisementWatcher();

    public Adapter()
    {
        _bleWatcher.Received += BleWatcherOnReceived;
    }

    private void BleWatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
    {       
        //how to connect?
        //I know, it's the wrong place to to this, but this is just an example
    }

    public void StartScanningForDevices(Guid[] serviceUuids)
    {
        _blewatcher.advertisementfilter.advertisement.serviceuuids.clear();
        foreach (var uuid in serviceuuids)
        {
            _blewatcher.advertisementfilter.advertisement.serviceuuids.add(uuid);
        }
        _blewatcher.start();
    }
}

Habe ich gefunden, die Proben, die mit DeviceInformation.FindAllAsync statt BluetoothLEAdvertisementWatcher diese sind aber nicht die Arbeit /Suche nach jedem Gerät.

UPDATE

Nach dem Graben um einige Zeit, die ich den folgenden Weg gefunden. Aber leider ist die Kopplung fehlschlägt. Das Gerät ist nur ein Arduino mit einem von der BLE shield. Ich kann auf jeden Fall verbinden mit Android und iOS. So muss es möglich sein, mit UWP irgendwie. :/

private void BleWatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{       
    var dev = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);
    //dev.DeviceInformation.Pairing.CanPair is true
    //dpr.Status is Failed
    DevicePairingResult dpr = await dev.DeviceInformation.Pairing.PairAsync(DevicePairingProtectionLevel.None);
    var service = await GattDeviceService.FromIdAsync(dev.DeviceInformation.Id);
}

UPDATE #2

Ich bin jetzt in der Lage zu entdecken, und ein paar (instabil, aber ok für jetzt), aber

var service = await GattDeviceService.FromIdAsync(args.Id);

wirft die folgende Ausnahme

System.IO.FileNotFoundException:
Das system kann nicht die angegebene Datei gefunden werden. (Ausnahme von HRESULT: 0x80070002)

Ich habe keine Ahnung, warum.

InformationsquelleAutor der Frage Sven-Michael Stübe | 2016-02-15

Schreibe einen Kommentar