2012-07-30 28 views
2

當應用程序關閉時,可以將位置感知添加到應用程序中?停用的iOS應用程序上的地理位置

例如,我想創建一個接近服務,當我的應用程序關閉時將其工作,並在到達某個區域時向用戶推送本地通知。

我讀了CLRegion我可以達到類似的結果,但只有當應用程序處於活動狀態(或在後臺)。

我需要類似於由用戶位置激活的遠程通知服務。但這聽起來很奇怪。 iOS中可能有類似的服務嗎?

回答

2

有2個選項:

其中一個是約翰在上面提到的重要位置變更服務。 另一種是startRegionMonitoring

兩者都涵蓋在Location Awarness Documentation從蘋果

兩個可以打開的終止(關閉)的應用程序進行短暫的時刻,你可以提供一個當地的推送通知,以提醒用戶。 應用程序無法進入正常狀態,但如果用戶單擊通知,應用程序將打開,以便您可以實現目標。

以下是攔截didFinishLaunchingWithOptions委託中的事件並觸發本地通知的示例代碼。 通常你不應該在這裏解僱通知,而是重新初始化位置的經理,得到新的位置,並顯示用戶沒有輸入區的消息(本地通知)...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //see if application was launched from a location event! 
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { 
     //if so, we need to reinitialize our location manager! 
     [[LocationManager sharedLocationManager] startSignificantLocationMonitoring]; 
     //fire a notification 

     UILocalNotification *notification = [[UILocalNotification alloc] init]; 
     notification.fireDate = [NSDate date]; 
     NSTimeZone* timezone = [NSTimeZone defaultTimeZone]; 
     notification.timeZone = timezone; 
     notification.alertBody = @"app did wake up"; 
     notification.alertAction = @"OK"; 
     notification.soundName = @"yes.caf"; 
     [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 

    } 
} 
+0

你確定「終止」狀態嗎?我的意思是,在文檔中,我只能找到對「暫停」狀態的引用(這並不意味着「關閉」的應用程序。你能添加一個鏈接嗎? – MatterGoal 2012-07-31 07:20:39

+0

是的。事實上,我已經測試了兩個。在我看來,startMonitoringSignificantLocationChanges是更好的,因爲它沒有區域監控選項的限制(在iOS中共享位置,但您可以監控的區域中有一個未知但可用的最大限制。) – Lefteris 2012-07-31 12:35:45

+2

似乎iOS 7.0有一個錯誤,它是在iOS 7.1上解決http://www.macrumors.com/2014/02/11/ios-71-fixes-location-apps/ – 2014-03-26 23:29:55

0

我不認爲你可以從iOS中的封閉應用程序做任何事情。您可以從後臺(非活動狀態)執行數量非常有限的操作,但我不知道您可以從已關閉的應用程序中執行任何操作。我真的不知道應用程序可以在不運行的情況下執行什麼操作;-)。

+0

我希望在基於位置服務的某種遠程推送通知(我知道...這聽起來非常奇怪:P) – MatterGoal 2012-07-30 20:48:08

+0

不奇怪,僅僅是不可能的。每個人都會喜歡做你正在談論的事情,但是在我們有生之年不會發生在蘋果產品上。抱歉。 – HackyStack 2012-07-30 20:56:04

2

我相信你可以使用SignificantChange API來喚醒已被系統關閉的應用程序(或崩潰)。但你仍應該關注區域監測,因爲它可能更接近你真正想要的。

這裏的鏈接: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW25

和相關部分:

如果出現更新時應用程序被暫停,系統喚醒它在後臺處理更新。如果應用程序啓動此服務,然後終止,系統會在新位置可用時自動重新啓動應用程序。此服務在iOS 4及更高版本中可用,並且僅在包含蜂窩無線電的設備上可用。

當您設置CLLocationManager就叫

- (void)startMonitoringSignificantLocationChanges 

和處理的典型方式的任何事件作爲一個代表回調

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

注意,如果應用程序被終止,您也會收到回覆您的應用程序委託完成啓動的方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

我也敢肯定,在這種情況下,回調將包括一個標誌,通知你,它推出的位置更新的結果。

相關問題