2015-07-20 112 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?无论哪种方式,仅仅因为用户退出到锁定屏幕,并不意味着他们以后从锁定屏幕启动应用程序。 –

相关问题