我上周刚刚发现了iBeacon,并且认为我已经试一试了。我在亚马逊上买了这个灯塔。 https://www.amazon.com/gp/product/B010Q2PUGA/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1 使用Light Blue应用程序,我能够读取信标信息(UUID,Major,Minor等),因此我知道信标正在广播。 按照本教程,我制作了一个应用程序来熟悉信标编程。 (使用我的UUID)代码有一个小的改动,由于swift版本,我不得不将println更改为print。 https://willd.me/posts/getting-started-with-ibeacon-a-swift-tutorial 尽管如此,我的应用似乎并没有认出我的灯塔。在我的日志/调试区域中,我只看到:
[]
[]
[]
我的代码是:
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "8EBB5704-9697-02C9-D073-BF9162B72D7B")!, identifier: "iBeacon-6713")
// let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "8EBB5704-9697-02C9-D073-BF9162B72D7B")!, major: 11046, minor: 11047, identifier: "ibeacon")
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self;
if (CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedWhenInUse) {
locationManager.requestWhenInUseAuthorization()
}
locationManager.startRangingBeaconsInRegion(region)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
// print(beacons)
// }
func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
print(beacons)
}
}
xcode:版本7.3.1(7D1014)
OS X El Capitan:版本10.11.5(15F34)
iOS:版本9.3.2(13F69)
Apple Swift 2.2版(swiftlang-703.0.18.8 clang-703.0.31)
答案 0 :(得分:1)
我怀疑 8EBB5704-9697-02C9-D073-BF9162B72D7B不是信标的接近UUID 。 LightBlue将为蓝牙设备显示许多不同的UUID,并非所有UUID都是ProximityUUID。与任何iOS应用程序一样,LightBlue必须知道PriximityUUID以检测具有CoreLocation的信标。如果没有,它仍然可以检测到使用CoreBluetooth的蓝牙传输,但它将无法读取iBeacon标识符。这可能就是发生的事情。
您需要找到设备的ProximityUUID。如果您不能使用制造商说明进行操作,则可以使用带有Locate应用的Android设备,该应用可以在不事先知道标识符的情况下读取iBeacon UUID。 iOS设备无法执行此操作。