我有一些使用这个uuid的信标:
0112233445566778899aabbccddeeff0 和major = 1但他们的未成年人是不同的。
这是显示这些数字的固件代码的一部分:
#define APP_MAJOR_VALUE 0x01, 0x02 #define APP_MINOR_VALUE 0x03, 0x04
#define APP_BEACON_UUID 0x01, 0x12, 0x23, 0x34, \
0x45, 0x56, 0x67, 0x78, \
0x89, 0x9a, 0xab, 0xbc, \
0xcd, 0xde, 0xef, 0xf0
static uint8_t m_beacon_info[APP_BEACON_INFO_LENGTH] =
{
APP_DEVICE_TYPE,
APP_ADV_DATA_LENGTH,
APP_BEACON_UUID,
APP_MAJOR_VALUE,
APP_MINOR_VALUE,
APP_MEASURED_RSSI
};
这是我的快速代码:
import UIKit
import CoreLocation
import CoreBluetooth
class HomeViewController: UIViewController, CLLocationManagerDelegate {
var locationManager: CLLocationManager!
var managerBLE: CBCentralManager?
override func viewDidLoad() {
super.viewDidLoad()
managerBLE = CBCentralManager(delegate: nil, queue: nil, options: [CBCentralManagerOptionShowPowerAlertKey: true])
locationManager = CLLocationManager()
locationManager.delegate = self
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
locationManager.requestWhenInUseAuthorization()
}
startScanning()
}
func startScanning() {
let beaconRegion = CLBeaconRegion(proximityUUID: UUID(uuidString: "your UUID")!, major: 1, identifier: "MyBeacon")
locationManager.startRangingBeacons(in: beaconRegion)
}
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
if beacons.count > 0 {
for beacon in beacons {
updateDistance(beacon.proximity)
if beacon.proximity == .near {
// run your code
}else if beacon.proximity == .far {
// run your code
}
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
但是当我在我的iphone上安装我的应用程序时基本没有任何反应。我不知道我做错了什么?
答案 0 :(得分:0)
您的代码需要调试。不幸的是,我们很难做到,因为我们没有灯塔。当您能够连接到信标时,尝试打印到日志。这是一个很好的调试起点。
确保你的灯塔有电池并且它们在范围内。
答案 1 :(得分:0)
一些问题:
此行:CLLocationManager.authorizationStatus() == .authorizedWhenInUse
应为CLLocationManager.authorizationStatus() != .authorizedWhenInUse
您需要放置UUID,包括短划线代替字符串"您的UUID"在这一行CLBeaconRegion(proximityUUID: UUID(uuidString: "your UUID")!,
根本不需要使用CBCentralManager
。
编辑:您还应该尝试使用现成的信标检测器应用程序,例如Locate(使用破折号输入您的UUID以配置它以检测您的信标)并验证它是否可以看到它。如果它没有看到它,它可能是您的硬件信标的问题,或者UUID可能不是您认为的。
答案 2 :(得分:0)
SWIFT 3:
首先,您应该在.Plist文件中添加带有适当字符串的键/字符串NSLocationAlwaysUsageDescription
在您的对象中添加CLLocationManagerDelegate
在此示例中添加CLLocationManagerDelegate
委托方法我将添加didRangeBeacons方法
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) { print(beacons) }
创建并初始化locationManager
let locationManager : CLLocationManager = CLLocationManager()
创建CLBeaconRegion
let beaconRegion : CLBeaconRegion = CLBeaconRegion(
proximityUUID: NSUUID.init(uuidString:"****-****-****-****-******") as! UUID,
identifier: "my beacon")
将代理人添加到对象locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
现在让我们开始范围
locationManager.startRangingBeacons(in: beaconRegion)
这将自动调用委托方法
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
print(beacons)
}