在开发中会遇到零零碎碎的一些小问题,诸如物联网开发中最常见的通过别的通讯协议来进行下载的方式。诸如此类会让我们无法直接方便的使用苹果的API来解决这类问题。
本次描述的是如何在一般Socket协议下载中遭遇锁屏时的处理方案
在下载类添加所需接收的通知
#import <notify.h>
#define NotificationLock CFSTR("com.apple.springboard.lockcomplete")
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
screenLockStateChanged, NotificationLock, NULL,
CFNotificationSuspensionBehaviorDrop);
然后实现那个方法screenLockStateChanged
static void screenLockStateChanged(CFNotificationCenterRef center,
void* observer,
CFStringRef name,
const void* object,
CFDictionaryRef userInfo)
{
NSString* lockstate = (__bridge NSString*)name;
if ([lockstate isEqualToString:(__bridge NSString*)NotificationLock]) {
NSLog(@"locked.");
/*
* 这里需要处理诸如Socket断开、通知用户等问题
*/
} else {
NSLog(@"lock state changed.");
}
}
简单实用
这里要更正一下,这个方法在苹果新出的审核规则里,已经被拒绝了,所以开发者们可以通过appleDelegate中的applicationWillResignActive方法配合NSNotificationCenter来检测锁屏问题以及HOME键事件。
禁用案例