【问题标题】:Beacon is not discovering iOS信标没有发现 iOS
【发布时间】:2016-01-31 19:12:22
【问题描述】:

我正在尝试发现 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)
}
}

【问题讨论】:

  • 如果它是“真正的”信标,请使用 CLBeacon,而不是 CoreBLuetooth 框架。
  • 不清楚,能否详细说明一下?或任何参考链接
  • 说你在展览,有很多摊位。每个摊位都有信标,当我去任何摊位时,应用程序应检测到信标并显示该摊位的添加
  • 有人可以指导我吗?
  • 查找 CLBeacon 的文档,可能还有关于 iBeacon 的教程。

标签: ios bluetooth ibeacon cbcentralmanager cbperipheral


【解决方案1】:

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

如果您想在 iOS 上检测 iBeacons,您必须使用 CoreLocation API。你可以阅读更多关于如何做到这一点here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多