在開發(fā)中會(huì)遇到零零碎碎的一些小問題杏死,諸如物聯(lián)網(wǎng)開發(fā)中最常見的通過別的通訊協(xié)議來進(jìn)行下載的方式淑翼。諸如此類會(huì)讓我們無法直接方便的使用蘋果的API來解決這類問題品追。
本次描述的是如何在一般Socket協(xié)議下載中遭遇鎖屏?xí)r的處理方案
在下載類添加所需接收的通知
#import <notify.h>
#define NotificationLock CFSTR("com.apple.springboard.lockcomplete")
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
screenLockStateChanged, NotificationLock, NULL,
CFNotificationSuspensionBehaviorDrop);
然后實(shí)現(xiàn)那個(gè)方法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.");
}
}
簡(jiǎn)單實(shí)用
這里要更正一下,這個(gè)方法在蘋果新出的審核規(guī)則里泞莉,已經(jīng)被拒絕了,所以開發(fā)者們可以通過appleDelegate中的applicationWillResignActive方法配合NSNotificationCenter來檢測(cè)鎖屏問題以及HOME鍵事件斯嚎。
禁用案例