當應用程序關閉時,可以將位置感知添加到應用程序中?停用的iOS應用程序上的地理位置
例如,我想創建一個接近服務,當我的應用程序關閉時將其工作,並在到達某個區域時向用戶推送本地通知。
我讀了CLRegion我可以達到類似的結果,但只有當應用程序處於活動狀態(或在後臺)。
我需要類似於由用戶位置激活的遠程通知服務。但這聽起來很奇怪。 iOS中可能有類似的服務嗎?
當應用程序關閉時,可以將位置感知添加到應用程序中?停用的iOS應用程序上的地理位置
例如,我想創建一個接近服務,當我的應用程序關閉時將其工作,並在到達某個區域時向用戶推送本地通知。
我讀了CLRegion我可以達到類似的結果,但只有當應用程序處於活動狀態(或在後臺)。
我需要類似於由用戶位置激活的遠程通知服務。但這聽起來很奇怪。 iOS中可能有類似的服務嗎?
有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];
}
}
我不認爲你可以從iOS中的封閉應用程序做任何事情。您可以從後臺(非活動狀態)執行數量非常有限的操作,但我不知道您可以從已關閉的應用程序中執行任何操作。我真的不知道應用程序可以在不運行的情況下執行什麼操作;-)。
我希望在基於位置服務的某種遠程推送通知(我知道...這聽起來非常奇怪:P) – MatterGoal 2012-07-30 20:48:08
不奇怪,僅僅是不可能的。每個人都會喜歡做你正在談論的事情,但是在我們有生之年不會發生在蘋果產品上。抱歉。 – HackyStack 2012-07-30 20:56:04
我相信你可以使用SignificantChange API來喚醒已被系統關閉的應用程序(或崩潰)。但你仍應該關注區域監測,因爲它可能更接近你真正想要的。
和相關部分:
如果出現更新時應用程序被暫停,系統喚醒它在後臺處理更新。如果應用程序啓動此服務,然後終止,系統會在新位置可用時自動重新啓動應用程序。此服務在iOS 4及更高版本中可用,並且僅在包含蜂窩無線電的設備上可用。
當您設置CLLocationManager就叫
- (void)startMonitoringSignificantLocationChanges
和處理的典型方式的任何事件作爲一個代表回調
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
注意,如果應用程序被終止,您也會收到回覆您的應用程序委託完成啓動的方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我也敢肯定,在這種情況下,回調將包括一個標誌,通知你,它推出的位置更新的結果。
你確定「終止」狀態嗎?我的意思是,在文檔中,我只能找到對「暫停」狀態的引用(這並不意味着「關閉」的應用程序。你能添加一個鏈接嗎? – MatterGoal 2012-07-31 07:20:39
是的。事實上,我已經測試了兩個。在我看來,startMonitoringSignificantLocationChanges是更好的,因爲它沒有區域監控選項的限制(在iOS中共享位置,但您可以監控的區域中有一個未知但可用的最大限制。) – Lefteris 2012-07-31 12:35:45
似乎iOS 7.0有一個錯誤,它是在iOS 7.1上解決http://www.macrumors.com/2014/02/11/ios-71-fixes-location-apps/ – 2014-03-26 23:29:55