Я делаю приложение для обнаружения маяков. Приложение отлично работает, когда приложение находится на переднем плане или экран включен. Но метод locationManager: didEnterRegion не вызывается, когда экран выключен. Как я знаю, locationManager: didEnterRegion следует вызывать в любом случае.locationManager: метод didEnterRegion не вызывается, когда экран выключен
Я пробовал много сценариев, например, подождите 15 минут после ввода региона, различных конфигураций (notifyEntryStateOnDisplay = true или false) ... но результат тот же. locationManager: метод didEnterRegion не вызывается до разблокировки телефона.
PS: locationManager: didExitRegion получает правильное название, когда экран выключен.
Я использовал iPhone 5, 5S и 6 плюс протестировать приложение на IOS 8.1
Edit: "обновления Location" и "Использование Bluetooth LE аксессуары" включены
Спасибо за ваши ответы.
import UIKit
import CoreLocation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var window: UIWindow?
var locationManager: CLLocationManager?
var lastProximity: CLProximity?
let beaconRegion = CLBeaconRegion(
proximityUUID: NSUUID(UUIDString:"d2c36ec5-dfsb-46d2-b069-d2f3r51996e0"),
identifier: "My region"
)
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.beaconRegion.notifyOnEntry = true
self.beaconRegion.notifyOnExit = true
self.beaconRegion.notifyEntryStateOnDisplay = false
locationManager = CLLocationManager()
if(locationManager!.respondsToSelector("requestAlwaysAuthorization")) {
locationManager!.requestAlwaysAuthorization()
}
locationManager!.delegate = self
locationManager!.pausesLocationUpdatesAutomatically = false
locationManager!.startMonitoringForRegion(beaconRegion)
locationManager!.startRangingBeaconsInRegion(beaconRegion)
locationManager!.startUpdatingLocation()
return true
}
func locationManager(manager: CLLocationManager!,
didDetermineState state: CLRegionState,
forRegion region: CLRegion!) {
NSLog("State determined")
}
func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons: [AnyObject]!,
inRegion region: CLBeaconRegion!) {
NSLog("didRangeBeacons")
}
func locationManager(manager: CLLocationManager!,
didEnterRegion region: CLRegion!) {
NSLog("didEnterRegion")
manager.startRangingBeaconsInRegion(region as CLBeaconRegion)
manager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!,
didExitRegion region: CLRegion!) {
NSLog("didExitRegion")
manager.stopRangingBeaconsInRegion(region as CLBeaconRegion)
manager.stopUpdatingLocation()
}
func locationManager(manager: CLLocationManager!,
monitoringDidFailForRegion region: CLRegion!,
withError error: NSError!) {
NSLog("monitoringDidFailForRegion - error: %@", [error.localizedDescription]);
}
}
Попробуйте удалить экран блокировки кода доступа на устройстве, и повторите тест. В зависимости от того, что вы пытаетесь сделать, когда пользователь входит в регион, экран блокировки может помешать. Очевидно, что выключение экрана блокировки не является решением, но может дать ключ к реальной проблеме. –
Код доступа уже отключен, пока я тестирую приложение –