2012-11-21 55 views
1

我目前正在爲客戶寫一個家庭自動化應用程序,打開他們的車庫,打開起居室和辦公室的燈光,以及其他類似的東西,當他們到達150米內的家中。他們離開時會做相反的事情。我非常感謝Geofencing內置於iOS,並且該功能在應用程序處於前臺時完美工作,但當用戶關閉應用程序並且手機仍在監控地理圍欄時,應用程序在發生事件時不會執行任何操作。是否有一個單獨的方法,而不是locationManager:didEnterRegion:我應該實現後臺通知給我的應用程序?下面是我使用的是現在的代碼:如何在iOS中監視背景中的位置?

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 
    NSLog(@"Entered Region - %@", region.identifier); 
    [self showRegionAlert:@"Entering Region" forRegion:region.identifier]; 
    [self sendCommand:true]; 
} 

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { 
    NSLog(@"Exited Region - %@", region.identifier); 
    [self showRegionAlert:@"Exiting Region" forRegion:region.identifier]; 
    [self sendCommand:false]; 
} 
+0

您是否更改了Info.plist文件以允許位置服務在後臺使用? – ekims

回答

1

要使用位置服務,而您的應用程序是在你需要改變你的應用程序的信息plist文件的背景。應支持文件文件夾中找到與這個樣子,YourAppName-Info.plist中

添加到信息屬性列表中的項目和類型所需的背景模式爲關鍵,這是數組類型。將一個項目添加到該陣列並鍵入應用程序註冊位置更新納入該項目的值。

1

我發現這不是問題。它的工作方式與應用程序處於活動狀態的方式完全相同。同樣的方法被調用。我一定要優化應用程序的背景啓動,以便它可以作爲即時響應。我想我雖然做錯了,或者剛開始時不工作。

+1

您能否提供如何優化應用程序的背景? – beryllium

0

打開Target Settings/Capabilities中的BackgroundModes並啓用位置更新。由於應用程序處於後臺,因此處理時間很短,應用程序將轉入睡眠模式。使用expirationHandler使應用程序處於活動狀態,以便進行大量處理。