【问题标题】:beacon proximity detector not working in iOS swift信标接近检测器在iOS swift中不起作用
【发布时间】:2020-07-04 12:45:27
【问题描述】:

我正在构建一个应用程序,该应用程序使用 iPhone 6 中的定位信标应用程序和 iPhone 7 中的我的应用程序检测信标设备接近度,但应用程序无法检测到信标发射器。我输入了正确的 UUID 和主要次要编号,但它不起作用。我正在运行 iOS 13.5 的 iPhone 7 和未检测到 iOS 12 的 iPhone 6。

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var distancestatuslbl: UILabel!
    var locationmanager: CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        locationmanager = CLLocationManager()
        locationmanager.delegate = self
        
        locationmanager.requestAlwaysAuthorization()
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
       
        if status == .authorizedAlways
        {
            print("Allowed any time")
            startScanning()
        }
        
        else if status == .authorizedWhenInUse
        {
            print("Allowed only during run time")
            startScanning()
        }
    }
    
    func startScanning() {

        if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self)
        {
             let uuid = UUID(uuidString: "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6")
            let majornumber: CLBeaconMajorValue = 123
            let minornumber: CLBeaconMinorValue = 456
            
            let beaconregion = CLBeaconRegion(uuid: uuid!, major: majornumber, minor: minornumber, identifier: "com.mybeacon")
            
            locationmanager.startMonitoring(for: beaconregion)
            
            print("Started scanning") 
        }
    }
    
    
    func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
       if region is CLBeaconRegion
       {
        if CLLocationManager.isRangingAvailable()
        {
            locationmanager.startRangingBeacons(in: region as! CLBeaconRegion)
        
            print("Starting ranging...")
            
        }
       }
    }
    
    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        
        let nearestbeacon = beacons.first!
        
        switch nearestbeacon.proximity {
        case .near:
            distancestatuslbl.text = "Near"
            break
            
        case .immediate:
            distancestatuslbl.text = "Immediate"
            break
        
        case .far:
            distancestatuslbl.text = "Far"
            break
        default:
            print("sdf")
        }        
    }
}

【问题讨论】:

  • 运行代码时,会打印哪些调试行?
  • 随时允许并开始扫描
  • Didenterregion() 未被调用

标签: ios swift core-location ibeacon


【解决方案1】:

您可能需要在viewDidLoad 中致电startScanning()。正如所写,它仅在首次授予权限后调用,这意味着它仅在您第一次运行应用程序并授予权限时启动,然后再也不会。

此外,通过在与您的应用相同的手机上运行定位应用来检查信标是否确实在传输。 Locate 是否检测到?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多