Мониторинг близости всегда возвращает false - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь обнаружить UIDevice.current.proximityState, но он всегда возвращает false, несмотря на то, что для UIDevice.current.isProximityMonitoringEnabled установлено значение true, и при проверке он выводится как true. Есть идеи?

Использование этого кода на iPhone X и 6S с одинаковыми результатами.

Запустите следующий код на таймере

UIDevice.current.isProximityMonitoringEnabled = true
print("enabled: \(UIDevice.current.isProximityMonitoringEnabled)") // prints true
print("state: \(UIDevice.current.proximityState)") // always prints false, even when sensor is covered.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Я уверен, что это ошибка в бета-версии xcode или iOS.

Точно такой же код иногда регистрируется, а иногда нет. Очень запутанно.

Я обновлю этот ответ, если что-нибудь выясню, но пока считаю это ошибкой.

0 голосов
/ 19 декабря 2018

Я думаю, что вы можете добавить слушателя, чтобы близость изменила событие. У меня работает

override func viewWillAppear(_ animated: Bool) {
  // other setup
  UIDevice.current.isProximityMonitoringEnabled = true
}

override func viewDidLoad() {
  // other setup
  NotificationCenter.default.addObserver(self, selector: #selector(self.notifyProximityChange), name: .UIDeviceProximityStateDidChange, object: nil)
}

@objc notifyProximityChange() {
    if UIDevice.current.proximityState {
        print("And it's closed to your face")
    } else {
        print("not anymore")
    }
}

Не забудьте удалить наблюдателя в конце жизненного цикла

enter image description here

0 голосов
/ 28 августа 2018

Вы проверяете состояние в главном потоке?

    var myTimer: Timer!

override func viewDidLoad() {
    super.viewDidLoad()

    myTimer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

}

@objc func runTimedCode() {
    DispatchQueue.main.async {
        UIDevice.current.isProximityMonitoringEnabled = true
        print("enabled: \(UIDevice.current.isProximityMonitoringEnabled)") // prints true
        print("state: \(UIDevice.current.proximityState)")
    }
}

И это работает на iPhone X

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