无法发现我正在做广告的CBServices

问题描述 投票:0回答:1

我正在创建一个自定义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")} } );
    }
ios xamarin bluetooth-lowenergy core-bluetooth
1个回答
0
投票

我假设你在另一台iOS设备上运行LightBlue应用程序。根据我的经验,iOS会缓存许多BLE数据,包括服务和特征。如果外围设备更改任何服务或字符(或添加或删除),那么在您运行LightBlue的iOS设备上重新启动蓝牙之前,iOS将不会看到这些更改。在某些情况下,我需要做的就是关闭/打开蓝牙,但在其他情况下我必须完全重启设备。如果您扫描Apple开发人员论坛,您会发现其他人报告相同的问题和相同的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.