2013-10-07 71 views
1

我可以在所有(模擬器和iPad設備)上接收位置更新,但是可以接收我的iPhone設備。iOS 7 - 在應用程序進入後臺後不會調用didUpdateLocations委託

self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
self.locationManager.pausesLocationUpdatesAutomatically = NO; 
self.locationManager.delegate = self; 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    CLLocation *newLocation = locations.lastObject; 
    NSLog(@"didUpdateLocations newLocation = %@", newLocation); 
. 
. 
} 

我只要應用程序處於前臺接收didUpdateLocations(的NSLog消息),但後我按主頁按鈕(即應用進去背景),我停止在didUpdateLocations接收通知。 '控制檯'不顯示NSLog消息,此後甚至狀態欄中的位置圖標也會在10秒內消失。

什麼工作的什麼不 -

  1. 看來,iOS 6中對我的其他iPhone 3GS的安裝工作正常。小地點圖標不會消失。

  2. 在iPad設備上使用iOS 7進行測試,並且該應用程序保持在後臺運行。

  3. iOS 6以及iOS 7的所有模擬器(iPhone和iPad)均按預期工作。

  4. 當我在iOS 7上對iPhone 4進行測試時,該應用程序不會在後臺運行。所以很可能,這個問題只在iOS 7上(甚至是某些特定的iPhone設備上)。

回答

3

我想我找到了這個問題的原因。在iOS的7「設置」程序有常規>「後臺應用刷新」,這是一旦關閉:( 因爲我把它「ON」,我的應用程序開始在後臺:)

+1

確保您處理,如果用戶有過正常,因爲我原來是掀起由於電池消耗 – RyanG

+0

感謝您的反饋意見。剛纔,我正在和我的同事討論這個問題,我們需要向用戶提供適當的反饋,並避免不必要的幫助臺呼叫。你知道如何獲得這個標誌「背景應用程序刷新」的價值在程序內的應用程序? – Ashok

+1

這可能有幫助(雖然我沒有測試雖然):http://stackoverflow.com/a/19138393/480415 – RyanG

0
運行

上述解決方案在iOS 8.X中並不適用於我的特殊情況,因此,我希望發佈能夠幫助其他人的解決方案。

我成功地設置了我在前臺,後臺和掛起狀態下收到的靜默推送通知。一旦我收到PN,我需要獲取位置更新。在應用程序處於前臺時我能夠這樣做,但是,當應用程序處於後臺時,我無法這樣做。

我需要做的是在info.plist文件中添加一個名爲NSLocationAlwaysUsageDescription的密鑰併爲其賦值。值可以是「您的位置在後臺需要」。

添加鍵後,我加入這個代碼我AppDelegate.m的應用中:didFinishLaunchingWithOptions:方法中 -

// Check for iOS 8.X. Without this guard the code will crash with "unknown selector" on iOS 7. 
if([[self locationManager] respondsToSelector:@selector(requestAlwaysAuthorization)]) 
{ 
    [[self locationManager] requestAlwaysAuthorization]; 
} 

一旦我將這兩件我能成功獲得背景位置更新。

感謝, 聽見的

相關問題