Не могу найти CBServices, которые я рекламирую - PullRequest
0 голосов
/ 25 августа 2018

Я создаю пользовательский CBService и добавляю их в CBPeripheralManager. Я рекламирую сервис вместе с рекламными данными. Но я не могу увидеть сервис, который я создал в приложении Light Blue. Приложение Light Blue показывает две службы, которые я не знаю, какие они есть, и я не добавил их. Рекламные данные отображаются, но не сервис. Ниже моя реализация создания сервиса и его рекламы в Xamarin:

void AdvertiseData()
    {
        var uui = new CBUUID[] { CBUUID.FromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961") };

        var nsArray = NSArray.FromObjects(uui);
        var nsObject = NSObject.FromObject(nsArray);

        var manufacturerDataBytes = new byte[6] { 5, 255, 76, 0, 25, 35 };

        var advertisementData = new NSDictionary(

             CBAdvertisement.DataLocalNameKey, "id1",
             CBAdvertisement.DataServiceUUIDsKey, nsObject,
             CBAdvertisement.DataManufacturerDataKey, NSData.FromArray(manufacturerDataBytes));


        try
        {
            var newService = new CBMutableService(CBUUID.FromString("1F3A8B1E-4BAA-45DA-B3A4-7A19DDC86305"), false);//1F3A8B1E-4BAA-45DA-B3A4-7A19DDC86305
            newService.Characteristics = new CBCharacteristic[]
              {
                new CBMutableCharacteristic(CBUUID.FromString("906377DD-F782-448C-9A65-796B48E10894"),//906377DD-F782-448C-9A65-796B48E10894
                CBCharacteristicProperties.Read, "FooChar",
                CBAttributePermissions.Readable),
                new CBMutableCharacteristic(CBUUID.FromString("2B77EC99-BE87-45D3-863C-599D5202E4C0"),//2B77EC99-BE87-45D3-863C-599D5202E4C0
                CBCharacteristicProperties.Write, null,
                CBAttributePermissions.Writeable)
              };

            cbPeriphMang.AddService(newService);
            //cbPeriphMang.RemoveAllServices();
        }
        catch(Exception ex)
        {

        }


        if (cbPeriphMang.Advertising) cbPeriphMang.StopAdvertising();

        cbPeriphMang.StartAdvertising(new StartAdvertisingOptions(){LocalName="alpha", ServicesUUID = new CBUUID[] { CBUUID.FromString("1F3A8B1E-4BAA-45DA-B3A4-7A19DDC86305")} } );
    }

1 Ответ

0 голосов
/ 13 сентября 2018

Я предполагаю, что вы запускаете приложение LightBlue на другом устройстве iOS.По моему опыту, iOS кэширует много данных BLE, включая сервисы и характеристики.Если периферийное устройство изменяет какую-либо службу или символы (или добавляет или удаляет), то iOS не увидит эти изменения, пока вы не перезапустите Bluetooth на устройстве iOS, на котором работает LightBlue.В некоторых случаях все, что мне нужно сделать, это включить / выключить Bluetooth, но в других случаях мне пришлось полностью перезагрузить устройство.Если вы сканируете форумы разработчиков Apple, вы обнаружите, что другие люди сообщают о той же проблеме и том же обходном пути.

...