我正在創建一個顯示監視器iBeacon區域的應用程序,這意味着當設備被鎖定並在信標範圍內時,我的應用程序圖標會顯示在底部的鎖定屏幕上剩下。檢測應用程序是否從鎖定屏幕打開
有沒有什麼辦法可以檢測我的應用程序是否通過此鎖屏圖標啓動,並運行一些代碼?
我正在創建一個顯示監視器iBeacon區域的應用程序,這意味着當設備被鎖定並在信標範圍內時,我的應用程序圖標會顯示在底部的鎖定屏幕上剩下。檢測應用程序是否從鎖定屏幕打開
有沒有什麼辦法可以檢測我的應用程序是否通過此鎖屏圖標啓動,並運行一些代碼?
當圖標出現時,表示已輸入信標區域。圖標第一次出現時將調用CLLocationManager
代表的didEnterRegion
方法。
您可以在那裏放置自定義代碼來設置一個標誌,指示出現的圖標。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
_iconShown = YES;
}
然後,當你的應用程序來到前臺,您可以檢查此標誌,看它是否被設置,並執行自定義邏輯:
- (void)applicationWillEnterForeground:(UIApplication *)application {
if (_iconShown) {
_iconShown = NO;
// Put custom logic here for launching from the icon
}
}
嗯,還存在另一種方式,你可以處理它,只是創建一個變量self.backgroundedToLockScreen
像:
- (void)applicationWillEnterForeground:(UIApplication *)application {
if (self.backgroundedToLockScreen) {
... // app was backgrounded to lock screen
} else {
... // app was backgrounded on purpose by tapping the home button or switching apps.
}
self.backgroundedToLockScreen = NO;
}
和
- (void)applicationWillEnterForeground:(UIApplication *)application {
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (UIApplicationStateInactive == state || // detect if coming from locked screen (iOS 6)
self.backgroundedToLockScreen) // detect if backgrounded to the locked screen (iOS 7)
{
... // app is coming from or was backgrounded to lock screen
} else {
... // app was backgrounded on purpose by tapping the home button or switching apps
}
self.backgroundedToLockScreen = NO;
}
希望這可能是對你有用。
我真的不明白你是怎麼設置backgroundedToLockScreen變量?它什麼時候設置爲YES?無論哪種方式,僅僅因爲用戶退出到鎖定屏幕,並不意味着他們以後從鎖定屏幕啓動應用程序。 –
並不完美,因爲用戶可以自己啓動應用程序,而不是從鎖定屏幕啓動應用程序,但這似乎是一個很好的折衷方案。我會留下一段時間的問題,看看是否還有其他問題,如果沒有,我會接受這個答案,謝謝! –
的確,這隻能告訴你,位置事件發生在應用程序以任何方式被帶到前臺之前,但這是你能做的最好的事情。這是一個常見問題。應用程序:didFinishLaunchingWithOptions:方法可以訪問launchOptions,它可以識別這種情況,但這僅適用於最初的啓動,不能返回到前臺。沒有用於輸入前景的launchOptions的等價物。 – davidgyoung
感謝您的輸入! –