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

Posted

技术标签:

【中文标题】信标接近检测器在iOS swift中不起作用【英文标题】:beacon proximity detector not working in 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() 未被调用 【参考方案1】:

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

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

【讨论】:

以上是关于信标接近检测器在iOS swift中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS:tableView.reloadData() 在 swift3 中不起作用

swift animateWithDuration 在 iOS 7 中不起作用

Unwind segue 在 Swift 3 和 iOS 10 中不起作用

Dlib 正面人脸检测在 IOS 中不起作用。?

带有 Swift 的 Firebase 推送通知在 ios 11.4 中不起作用

委托和数据源在 MessageKit Swift IOS 中不起作用