有没有办法检测iPhone的屏幕是打开还是关闭?例如,按下手机的屏幕锁定按钮。
我一直在用 (void)applicationWillResignActive:(UIApplication *)application;
为这些事件做准备(大部分工作都很好),但是对于来电,短信等也会触发这种方法。
据我所知,没有文件化的方法来确定这一点。
我一直在玩一些解决方法,比如检查屏幕分辨率是否改变,检查方向是否未知,或获得设备的亮度。什么都没有消失。
有没有人有这方面的创意/解决方案?
有没有办法检测iPhone的屏幕是打开还是关闭?例如,按下手机的屏幕锁定按钮。
我一直在用 (void)applicationWillResignActive:(UIApplication *)application;
为这些事件做准备(大部分工作都很好),但是对于来电,短信等也会触发这种方法。
据我所知,没有文件化的方法来确定这一点。
我一直在玩一些解决方法,比如检查屏幕分辨率是否改变,检查方向是否未知,或获得设备的亮度。什么都没有消失。
有没有人有这方面的创意/解决方案?
是的,没有确定的方法。 UIApplication
有房产 protectedDataAvailable
将返回 YES
当屏幕解锁时 NO
如果锁定 仅当用户启用内容保护时。所以这是我能想到的最接近但不可靠的。在这种情况下,你甚至可以听 UIApplicationProtectedDataDidBecomeAvailable
和 UIApplicationProtectedDataWillBecomeUnavailable
通知。
是的,没有确定的方法。 UIApplication
有房产 protectedDataAvailable
将返回 YES
当屏幕解锁时 NO
如果锁定 仅当用户启用内容保护时。所以这是我能想到的最接近但不可靠的。在这种情况下,你甚至可以听 UIApplicationProtectedDataDidBecomeAvailable
和 UIApplicationProtectedDataWillBecomeUnavailable
通知。
您可以使用 达尔文通知,听听事件。我不是百分百肯定,但它看起来像是在越狱的iOS 5.0.1 iPhone 4上运行,其中一个事件可能就是你所需要的:
com.apple.iokit.hid.displayStatus
com.apple.springboard.hasBlankedScreen
com.apple.springboard.lockstate
注意: 根据海报的说法 对我在这里回答的类似问题发表评论,这应该适用于非越狱手机。
要使用它,请注册这样的事件(这只注册一个事件,但如果这不适合你,请尝试另外两个):
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
NULL, // observer
displayStatusChanged, // callback
CFSTR("com.apple.iokit.hid.displayStatus"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
哪里 displayStatusChanged
是你的事件回调:
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSLog(@"event received!");
// you might try inspecting the `userInfo` dictionary, to see
// if it contains any useful info
if (userInfo != nil) {
CFShow(userInfo);
}
}
我相信当屏幕打开时,上面列出的事件会被触发 和 关闭,锁定和解锁。您可能需要自己跟踪状态。也,
com.apple.springboard.lockcomplete
仅在屏幕锁定时调用,而不是在屏幕锁定时调用。
尝试 这个 解决方法。作者声称它在4.2上运行良好
我在iOS 3.1(iPhone 3G)上查了一下 - 效果很好。
更新:在iOS 5 beta 7(iPod Touch 4G)上不起作用:-(
update2:app在屏幕锁定时转到后台,因此解决方案有点适用于iOS 5 beta 7 :-)