无法扫描通过CBCentral经理服务ID为iBecon信号
问题描述:
使用蓝牙核心,我能够与CBCentralManager要搜索的iBecon信号工作扫描optionn零: -无法扫描通过CBCentral经理服务ID为iBecon信号
Shared.sharedInstance.centralManager?.scanForPeripherals(withServices: nil, options:[CBCentralManagerScanOptionAllowDuplicatesKey:true])
但是,当我提供我所希望的服务ID即: -
Shared.sharedInstance.centralManager?.scanForPeripherals(withServices: [serviceID], options:[CBCentralManagerScanOptionAllowDuplicatesKey:true])
它永远不会调用didDiscoverPeripheral委托方法,我需要扫描在后台模式外围也并根据苹果的文档,你需要明确提供服务ID,当您需要在后台模式下扫描。任何人都可以在这里帮助我做错了什么。
答
我使用这样的, 连接按钮单击事件 和使用CBCentralManagerDelegate, CBPeripheralDelegate
代表
func connectDevice(sender:UIButton){
if peripheral != nil {
manager.cancelPeripheralConnection(peripheral)
manager = CBCentralManager(delegate: self, queue: nil)
}
}
func centralManagerDidUpdateState(central: CBCentralManager) {
if central.state == CBCentralManagerState.PoweredOn {
central.scanForPeripheralsWithServices(nil, options: nil)
} else {
self.showAlert(Messages().alert , message: "Bluetooth is not on.")
}
}
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
let device = (advertisementData as NSDictionary).objectForKey(CBAdvertisementDataLocalNameKey) as? NSString
print(device)
if device?.containsString(BEAN_NAME) == true {
self.manager.stopScan()
self.peripheral = peripheral
self.peripheral.delegate = self
manager.connectPeripheral(peripheral, options: nil)
}
}
是您正在为扫描通过外围所宣传的服务?外围设备所提供的一组服务可能是外设提供的服务的一个子集。什么是'serviceID'? – Paulw11
serviceID是已由外设通告的服务的CBUUID。 – Himanshu