2017-12-02 2 views
1

iOS 에너지 가이드를 따르고 저전력 모드를 인식하려고합니다. 이를 위해 here에 게시 된 가이드를 따르면서이 유형의 이벤트를 구독하는 방법에 대한 코드를 제공합니다. 아래에 표시된대로이 함수를 구현했습니다.iOS에서 저전력 모드 알림을 수신하지 못했습니다.

/// Function to subscribe to low-power mode events 
    /// 
    func subscribeToLowBatteryNotification() { 
    NotificationCenter.default.addObserver(self, 
         selector: #selector(lowBatteryHandle), 
         name: Notification.Name.NSProcessInfoPowerStateDidChange, 
         object: nil) 
    } 

    /// handler for low-power mode events. 
    /// 
    @objc func lowBatteryHandle(_ notification: Notification) { 
    let lowPowerModeEnabled = ProcessInfo.processInfo.isLowPowerModeEnabled 

    if lowPowerModeEnabled { 
     stopTrackingBackground() 
    } else { 
     startTrackingBackground() 
    } 
    } 

이것은 매우 간단합니다. 그런 다음 필요에 따라 위치를 지속적으로 추적하면서 백그라운드에서 앱을 배치합니다. 그런 다음 저전력 모드를 활성화하고 실제로 백그라운드에서받은 알림이 추적을 일시 중단하도록 앱을 성공적으로 유도합니다. 불행히도, 저전력이 이 비활성화 된 경우과 상태 변경에 대한 비슷한 이벤트가 백그라운드에서 수신 될 것으로 예상됩니다. 백그라운드에서 수신되지 않으며 이벤트가 앱에 다시 입력 될 때만 앱에 전달됩니다. . 누구든지 백그라운드에서 이러한 이벤트를받는 방법을 알고 있습니까?

답변

0

앱이 백그라운드 추적을 중단하면 시스템이 suspend the application으로 이동합니다. 일시 중지 된 상태에서는 앱이 절전 모드 상태에 관한 알림을받지 못합니다. 한 가지 전략은 더 낮은 수준의 위치 게재 빈도 (예 : significant location changes)로 이동하거나 deferred location 업데이트를 사용 사례로 사용하거나 적절하지 않을 수 있습니다.

사용자가 전역 또는 앱의 백그라운드 앱 새로 고침 설정을 사용 중지하면 중요한 변경 위치 서비스가 앱을 다시 실행하지 않습니다. 또한 백그라운드 앱 새로 고침이 꺼져있는 동안 앱은 포 그라운드에있을 때에도 중요한 변경 또는 지역 모니터링 이벤트를받지 못합니다.

저전력 모드는 백그라운드 앱을 전체적으로 새로 고침 할 수 없기 때문에 중요한 변경 이벤트가 전달되지 않을 가능성이 높습니다. 이 메모에는 "사용자이 비활성화되면"라고 표시되지만 저전력 모드의 경우 기본 동작인지 아니면 보조인지를 나타내지 않습니다. 그러나 Deferred location 업데이트를 사용할 수 있습니다. 응용 프로그램은 다시 사람들을 다시 시작할 수 시작될 때까지

애플에서 사용 권한이 앱의 automatically pausing location updates

에 문서의 다른 지침을 제공, 위치 업데이트에 일시 정지 위치 변경에 대한 액세스를 종료 업데이트. 위치 업데이트가 완전히 중지되지 않도록하려면 앱이 백그라운드로 이동할 때이 속성을 사용 중지하고 위치 정확도를 kCLLocationAccuracyThreeKilometers로 변경하는 것이 좋습니다. 이렇게하면 위치에 친숙한 방식으로 위치 업데이트를 계속받을 수 있습니다.

는 또한, standard location service 설명서, 애플은

는 당신이 실제로 필요한 것보다 더 높은 정확도로 전력 소비, 설정 결코 desiredAccuracy 속성을 최소화하기 위해 지침을 제공합니다. 마찬가지로 distanceFilter 속성을 항상 앱의 요구 사항을 충족하는 가장 큰 값으로 설정합니다. 시스템은 항상 사용 가능한 최상의 위치 데이터를 제공하려고하지만,이 속성은 시스템이 필요하지 않을 때 하드웨어 요소를 끌 수있는 유연성을 제공합니다.

이 정보는 모두 저전력 모드가 활성화되어있는 동안 계속해서 업데이트를 받으려면 표준 서비스 또는 지연된 서비스를 사용해야 함을 나타냅니다.표준 서비스가 활성화 된 상태에서 친숙 해지려면 distanceFilterdesiredAccuracy 속성을 조정하여 업데이트를 적게 제공하도록 관리자를 재구성 할 수 있습니다.

+0

이것이 절전 모드에서 허용되며 응용 프로그램을 종료하지 않을 것이라고 확신합니까? – jtimz

+0

@jtimz 모든 사과 문서와 마찬가지로 좋은 정보이지만 정보를 추적 할 때가 있습니다. 문서에서 더 많은 증거로 내 대답을 업데이트했습니다. –

+0

철저한 답장을 보내 주셔서 감사합니다. 나는이 필터들로 꽤 놀았지만 저전력 모드가 아니라면 (100 미터 내에서) 꽤 좋은 정확도가 필요합니다. 또한 새로운 설정을 적용하려면 위치 추적 관리자를 다시 시작해야한다고 생각합니다. 그렇게함으로써 나는 그 응용을 죽일 위험에 처해있다. 나는 틀린가? – jtimz

관련 문제