2

我正在尝试发现 ibeacon。我在 iPhone 4s 上运行应用程序。设备蓝牙已打开。信标也在其他 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)
}
}
4

1 回答 1

4

CoreBluetoothCBCentralManager如代码所示,无法使用API和类检测 iBeacons。虽然 iBeacons 是蓝牙 LE 设备,但Apple 具有阻止 iOS 设备通过didConnectPeripheral回调读取原始广告数据的安全块。

如果要在 iOS 上检测 iBeacons,则必须使用CoreLocationAPI。您可以在此处阅读有关如何执行此操作的更多信息

于 2015-10-31T13:15:56.393 回答