2015-07-20 142 views
1

我正在創建一個顯示監視器iBeacon區域的應用程序,這意味着當設備被鎖定並在信標範圍內時,我的應用程序圖標會顯示在底部的鎖定屏幕上剩下。檢測應用程序是否從鎖定屏幕打開

有沒有什麼辦法可以檢測我的應用程序是否通過此鎖屏圖標啓動,並運行一些代碼?

回答

1

當圖標出現時,表示已輸入信標區域。圖標第一次出現時將調用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 
    } 
} 
+0

並不完美,因爲用戶可以自己啓動應用程序,而不是從鎖定屏幕啓動應用程序,但這似乎是一個很好的折衷方案。我會留下一段時間的問題,看看是否還有其他問題,如果沒有,我會接受這個答案,謝謝! –

+1

的確,這隻能告訴你,位置事件發生在應用程序以任何方式被帶到前臺之前,但這是你能做的最好的事情。這是一個常見問題。應用程序:didFinishLaunchingWithOptions:方法可以訪問launchOptions,它可以識別這種情況,但這僅適用於最初的啓動,不能返回到前臺。沒有用於輸入前景的launchOptions的等價物。 – davidgyoung

+0

感謝您的輸入! –

0

嗯,還存在另一種方式,你可以處理它,只是創建一個變量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; 
} 

希望這可能是對你有用。

+0

我真的不明白你是怎麼設置backgroundedToLockScreen變量?它什麼時候設置爲YES?無論哪種方式,僅僅因爲用戶退出到鎖定屏幕,並不意味着他們以後從鎖定屏幕啓動應用程序。 –

相關問題