检测应用程序是否从锁定屏幕打开
问题描述:
我正在创建一个显示监视器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;
}
希望这可能是对你有用。
+0
我真的不明白你是怎么设置backgroundedToLockScreen变量?它什么时候设置为YES?无论哪种方式,仅仅因为用户退出到锁定屏幕,并不意味着他们以后从锁定屏幕启动应用程序。 –
并不完美,因为用户可以自己启动应用程序,而不是从锁定屏幕启动应用程序,但这似乎是一个很好的折衷方案。我会留下一段时间的问题,看看是否还有其他问题,如果没有,我会接受这个答案,谢谢! –
的确,这只能告诉你,位置事件发生在应用程序以任何方式被带到前台之前,但这是你能做的最好的事情。这是一个常见问题。应用程序:didFinishLaunchingWithOptions:方法可以访问launchOptions,它可以识别这种情况,但这仅适用于最初的启动,不能返回到前台。没有用于输入前景的launchOptions的等价物。 – davidgyoung
感谢您的输入! –