如何解决检测iPhone屏幕是否开/关
| 有什么方法可以检测iPhone屏幕是打开还是关闭?例如,当按下手机的屏幕锁定按钮时。 我一直在使用ѭ0来准备此类事件(大部分情况下效果很好),但是此方法也会针对来电,短信等触发。 据我所知,尚无记录的方法来确定这一点。 我一直在尝试一些解决方法,例如检查屏幕分辨率是否更改,检查方向是否未知或获取设备的亮度。尚无任何进展。 有人对此有任何创意/解决方法吗?解决方法
是的,没有确定的方法。
UIApplication
具有属性protectedDataAvailable
,仅当用户启用内容保护时,它才会在屏幕解锁时返回YES
,并在锁定时返回NO
。因此,这是我能想到的最接近但不可靠的方法。在这种情况下,您甚至可以收听UIApplicationProtectedDataDidBecomeAvailable
和UIApplicationProtectedDataWillBecomeUnavailable
通知。
,您可以使用达尔文通知来监听事件。我不是100%确信,但是从我看来,通过越狱的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);
其中“ 9”是您的事件回调:
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:屏幕锁定时,应用程序进入后台,因此解决方案在iOS 5 beta 7上有效:-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。