【发布时间】:2018-05-22 19:22:11
【问题描述】:
我正在尝试使用 Visual Studio for Mac 将服务添加到 IOS 的 CBPeripheralManager。但是,当我使用其他设备扫描我的外围设备时,我没有看到我添加的服务。广告名是对的,但是我只看到其他服务(大概是iphone默认的)。
顺便说一句,我用 swift 编写了程序并遇到了同样的问题。
我的xcode版本是9,我的ios目标版本是11。
我的代码如下
CBPeripheralManager _peripheral;
public BLEPeripheral()
{
_peripheral = new CBPeripheralManager();//this, DispatchQueue.CurrentQueue);
_peripheral.CharacteristicSubscribed += (object sender, CBPeripheralManagerSubscriptionEventArgs e) =>
{
Console.WriteLine("Device Subscribed: {0}", e.Central.UUID);
_connectedDevices.Add(e.Central);
ServiceSubscribed(this, e);
};
_peripheral.WriteRequestsReceived += (object sender, CBATTRequestsEventArgs e) => {
Console.WriteLine("Write Request Received");
};
_peripheral.ServiceAdded += (object sender, CBPeripheralManagerServiceEventArgs e) =>
{
Console.WriteLine("Service {0} was added", e.Error);
Console.WriteLine(e.Service.Characteristics.Length.ToString());
Console.WriteLine(e.Service.UUID.ToString());
IsAdvertising = true;
StartAdvertisingOptions advOptions = new StartAdvertisingOptions();
advOptions.LocalName = "myDevice";
_peripheral.StartAdvertising(advOptions);
Console.WriteLine("starting the advertisement");
};
_peripheral.AdvertisingStarted += (object sender, Foundation.NSErrorEventArgs e) =>
{
Console.WriteLine("Advertising did start");
};
_peripheral.StateUpdated += (object sender, EventArgs e) =>
{
Console.WriteLine("UpdatedState: {0}", _peripheral.State);
};
}
我的服务设置代码是:
public void setupService()
{
txChar = new CBMutableCharacteristic(txCharUUID, CBCharacteristicProperties.Notify, null, CBAttributePermissions.Readable);
var MyServiceUUID = CBUUID.FromString("A66C4FFC-52C6-4C04-B97C-34E5E91DG5BG");
MyService = new CBMutableService(MyServiceUUID, true);
MyService.Characteristics = new CBMutableCharacteristic[] { txChar };
_peripheral.AddService(MyService);
}
peripheralmanager 的状态是 PoweredOn。在按下添加服务并开始广告的按钮之前,我会检查这一点。
【问题讨论】:
标签: ios xamarin bluetooth-lowenergy core-bluetooth