Как я могу узнать, что мое приложение работает в фоновом режиме?

Я написал эту программу, она работает, когда приложение отображается на экране

Если приложение в фоновом режиме, оно перестает печатать широту, когда я возобновляю приложение, оно начинает печатать снова.

Я включил фоновые режимы в xcode, а также проверил Location updatesпочему мое приложение до сих пор не работает в фоновом режиме?

Если приложение работает, просто print функция не работает в фоновом режиме, как я могу узнать, что приложение работает?

class ViewController: UIViewController,
    CLLocationManagerDelegate {

    var locationManager: CLLocationManager = CLLocationManager()
    var startLocation: CLLocation!

    func locationManager(_ manager: CLLocationManager,
                         didUpdateLocations locations: [CLLocation])
    {
        let latestLocation: CLLocation = locations[locations.count - 1]
        print(latestLocation.coordinate.latitude)    
    }

    override func viewDidLoad() {
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        startLocation = nil

    }
}

2 ответа

Решение

Если ваше приложение использует местоположение в фоновом режиме). Вы должны установить allowsBackgroundLocationUpdates ДА в дополнение к настройке возможности фонового режима в Info.plist, В противном случае обновления местоположения доставляются только на переднем плане.

если CLLocationManager сначала вызывается startUpdatingLocation метод, и в файле projectname-Info.plist добавляется Обязательный Background Modes -> Приложение регистрирует обновления местоположения.

Во-первых, ваша проблема:

locationManager.requestWhenInUseAuthorization()

Это просит вашего менеджера местоположения обновить свое местоположение, только когда ваше приложение находится на переднем плане. Вы должны изменить это на:

locationManager.requestAlwaysAuthorization()

Если это все еще не работает, убедитесь, что ваш менеджер местоположения запускает обновления, добавив оператор печати в функции делегата.

Во-вторых, как напечатать материал в фоновом режиме:

Мой любимый способ - регистрировать вещи в UserDefaults, потому что они сохраняются при перезапуске приложения. Я установлю свои операторы печати в качестве значения для log ключ к примеру. После перезагрузки я прочитаю содержимое UserDefaults из log ключ.

Другие вопросы по тегам