Beacon没有发现iOS

时间:2015-10-31 12:29:21

标签: ios bluetooth ibeacon cbcentralmanager cbperipheral

我正在尝试发现ibeacon。我正在iPhone 4s上运行应用程序。设备蓝牙已开启。 beacon也在其他iOS应用程序中发现。 当我在代理“centralManagerDidUpdateState”被调用并且状态为“On”之后我正在搜索服务时,没有任何反应。预计应该调用“didDiscoverPeripheral”,但没有任何反应。我在这做错了什么?

Hi,

import UIKit
import FBSDKLoginKit
import SwiftQRCode
import CoreBluetooth

@objc
 class DashboardViewController: UIViewController {

var myCentralManager:CBCentralManager!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    myCentralManager = CBCentralManager(delegate: self, queue: nil)
   //        let options = [CBCentralManagerScanOptionAllowDuplicatesKey:true]
    myCentralManager.scanForPeripheralsWithServices(nil, options: nil)


 }

 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.hidden = true

 }


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/
   }


  // MARK: CBCentralManagerDelegate
  extension DashboardViewController: CBCentralManagerDelegate {

 func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {

    peripheral.delegate = self

    //        if peripheral.state ==  CBPeripheralState.Disconnected {
    //        
   //           central.connectPeripheral(peripheral, options: nil)
   //        }

    }

func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {

    peripheral.delegate = self
    peripheral.discoverServices(nil)

}



func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) {

}

func centralManager(central: CBCentralManager, didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?) {

}
 }

  // MARK: CBCentralManagerDelegate
  extension DashboardViewController: CBPeripheralDelegate {

func centralManagerDidUpdateState(central: CBCentralManager) {

    switch central.state{
    case CBCentralManagerState.PoweredOn:
        print("On.")
        break
    case CBCentralManagerState.PoweredOff:
        print("Off.")
        break
    case CBCentralManagerState.Resetting:
        print("Resetting.")
        break
    case CBCentralManagerState.Unauthorized:
        print("Unauthorized.")
        break
    case CBCentralManagerState.Unknown:
        print("Unknown.")
        break
    case CBCentralManagerState.Unsupported:
        print("Unsupported.")
        break
    }
  }

func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) {

    for service in peripheral.services!{
        peripheral.discoverCharacteristics(nil, forService: service)
    }
}

func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) {

    for charactristics in service.characteristics!{
        peripheral.setNotifyValue(true, forCharacteristic: charactristics)
    }

}

func peripheral(peripheral: CBPeripheral, didUpdateNotificationStateForCharacteristic characteristic: CBCharacteristic, error: NSError?) {

    if characteristic.isNotifying {
        print("Notifying...")
    }
}

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
    print(characteristic.value)
}
}

1 个答案:

答案 0 :(得分:4)

无法检测到CoreBluetooth API 的iBeacons和代码中显示的CBCentralManager类。虽然iBeacons是蓝牙LE设备,但Apple has security blocks that prevent iOS devices from reading the raw advertisement data带有didConnectPeripheral回调。

如果要在iOS上检测iBeacons,则必须使用CoreLocation API。您可以详细了解如何执行此操作here.