перечислить все маяки рядом с вами - PullRequest
0 голосов
/ 02 февраля 2019

Я использую приведенный ниже код для подключения к моему маяку.

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager: CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        print("viewDidLoad==ViewController")

        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        print("didChangeAuthorization")
        if status == .authorizedAlways {
            if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
                if CLLocationManager.isRangingAvailable() {
                    startScanning()
                }
            }
        }
    }

    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        print("didRangeBeacons===\(beacons.count)")
        if beacons.count > 0 {
            print("basss---\(beacons[0].proximityUUID)")
            updateDistance(beacons[0].proximity)
        } else {
            updateDistance(.unknown)
        }
    }

    func updateDistance(_ distance: CLProximity) {
        print("updateDistance")
        UIView.animate(withDuration: 0.8) {
            switch distance {
            case .unknown:
                self.view.backgroundColor = UIColor.gray

            case .far:
                self.view.backgroundColor = UIColor.blue

            case .near:
                self.view.backgroundColor = UIColor.orange

            case .immediate:
                self.view.backgroundColor = UIColor.red
            }
        }
    }


    func startScanning() {
        // 39316, 54420, 5268
        let uuid = UUID(uuidString: "86477363-EAB1-4988-AA99-B5C1517008D9")!
        let beaconRegion = CLBeaconRegion(proximityUUID: uuid, major: 1, minor: 52681, identifier: "MyBeacon")

        locationManager.startMonitoring(for: beaconRegion)
        locationManager.startRangingBeacons(in: beaconRegion)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

Это рабочий код.

Однако я хочу перечислить все ближайшие маяки.

Есть идеи, как это сделать?


Проблема в том, что я говорю, какой маяк искать в startScanning.

Что я хочу сделатьпоиск всех маяков, находящихся в зоне действия, и их отображение.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете изменить определение своего региона, чтобы оно не указывало мажор или минор:

let beaconRegion = CLBeaconRegion(proximityUUID: uuid,  identifier: "MyBeacon")

Это будет соответствовать всем маякам с этим UUID независимо от мажора и минора.

Если вы хотите сопоставить больше UUID, вы можете создать до 20 различных регионов, каждый с разным UUID, а также монитор и диапазон на всех из них.(Обязательно измените параметр идентификатора для каждого региона.)

Однако существует ограничение на количество регионов, которые вы можете отслеживать (21-й регион, зарегистрированный для мониторинга, не будет иметь никакого эффекта.).Не существует жесткого ограничения на количество областей, которые вы можете выбрать, но как только вы превысите 100 или около того, производительность вашего приложения значительно снизится.

К сожалению, на iOS невозможно настроить регион, которыйсоответствует всем маякам независимо от UUID.Это ограничение безопасности Apple по своему замыслу, хотя и глупое ИМО.Android, MacOS, Linux и Windows не имеют таких ограничений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...