在iOS7上检测应用程序从lockscreen与其他iOS应用程序变为活动状态

在iOS7上检测应用程序从lockscreen与其他iOS应用程序变为活动状态,第1张

概述我的应用程序在从锁定屏幕激活时处于不同的行为(锁定时处于活动状态),或从任何其他方式变为活动状态. 在iOS 6及更低版本上,我可以检测到这个 UIApplicationState state = [[UIApplication sharedApplication] applicationState];if (UIApplicationStateInactive == state) // 我的应用程序在从锁定屏幕激活时处于不同的行为(锁定时处于活动状态),或从任何其他方式变为活动状态.

在iOS 6及更低版本上,我可以检测到这个

UIApplicationState state = [[UIApplication sharedApplication] applicationState];if (UIApplicationStateInactive == state)    // Coming from locked screen (iOS 6)else    // Coming from Springboard,another app,etc...

但是在iOS 7中,这两种情况下的状态值都是UIApplicationStateBackground.这是预期的行为吗?如何正确检测应用程序是否从锁定屏幕启动?

注册开发商,我已经在NDA解除之前将其发布在devforums上,见here

解决方法 我能够找出一个黑客,到目前为止似乎是可靠的.它只适用于设备,而不是模拟器,并且已经在运行iOS 7的iPhone 5s,5和4S上进行了测试.

似乎没有可能的方式来检测iOS 7上的应用程序的发布位置,但是有一种方法可以检测是否要进入锁屏vs跳板.诀窍是在applicationDIDEnterBackground中读取屏幕亮度.当应用程序由于按下锁定按钮或自动锁定超时而触发背景时,iOS 7上的亮度将为0.0.否则,将>按住主页按钮时为0,或从多任务选择器或通知中心启动其他应用程序.

- (voID)applicationDIDEnterBackground:(UIApplication *)application {    CGfloat screenBrightness = [[UIScreen mainScreen] brightness];    NSLog(@"Screen brightness: %f",screenBrightness);    self.backgroundedTolockScreen = screenBrightness <= 0.0;}

现在我有一个ivar持有这个信息,我可以在applicationWillEnterForeground中使用它来确定我的应用程序流程.

- (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;}

它不是与iOS 6的行为完全相同.在iOS 6中,您可以检查UIApplicationState以检测您的来自哪里,并且该解决方案可以解答与应用程序背景时所处的位置相似但并非完全相同的问题.例如,由于屏幕锁定超时,也许该应用程序是背景化的,但是另一个应用程序的通知会唤醒设备,并且用户直接从锁定屏幕中进入,然后返回到我的应用程序.我的应用程序将确定用户进入锁屏的背景知识,但是当他们回来时,他们实际上是从活跃的屏幕上来的.对于我的应用程序来说,这个差异是微不足道的,但是你的体重可能会有所不同.

那么老版本的 *** 作系统支持呢?我的应用程序还支持iOS 6,所以我需要得到旧的行为.简单.只是应用状态监控到前台的方法:

- (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;}

我不知道亮度读数有多可靠,或者将来的 *** 作系统版本是否会改变,但同时这个黑客似乎是我们能够获得的最好的.希望这可以帮助.

总结

以上是内存溢出为你收集整理的在iOS7上检测应用程序从lockscreen与其他iOS应用程序变为活动状态全部内容,希望文章能够帮你解决在iOS7上检测应用程序从lockscreen与其他iOS应用程序变为活动状态所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1097493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存