信标接近检测器在 iOS swift 中不工作

beacon proximity detector not working in iOS swift

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

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")
        }        
    }
}

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

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