您的位置:首页 > 理论基础 > 计算机网络

解决iPhone网络软件在睡眠情况断线问题

2012-02-24 14:20 337 查看
如果你希望使用iPhone的网络功能并保持长连接,并使用Wifi的话,你可能会发现一个问题,那就是在iPhone处于睡眠状态时,Wifi会中断,这样程序就无法保持连接。(iPhone非官方SDK)

下面的代码可能会帮你解决这个问题。

以下代码摘自MobileChat:

首先在applicationDidFinishLaunching方法中添加以下代码:

IONotificationPortRef
notificationPort;

root_port = IORegisterForSystemPower(self,
¬ificationPort, powerCallback, ¬ifier);

CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPor t), kCFRunLoopCommonModes);

接着添加如下全局方法(在所有类之外添加)

void powerCallback(void *refCon,
io_service_t service, natural_t messageType, void *messageArgument)
{

[(YourAppnameApp*)refCon
powerMessageReceived: messageType withArgument: messageArgument];

}

在你的程序里添加下面的代码:

- (void)powerMessageReceived:(natural_t)messageType
withArgument:(void *)
messageArgument {

switch (messageType)
{

case kIOMessageSystemWillSleep:

IOAllowPowerChange(root_port,
(long)messageArgument);

break;

case kIOMessageCanSystemSleep:

//if([self
wifiKeepAliveIsSet]) {

IOCancelPowerChange(root_port,
(long)messageArgument);

//}

break;

case kIOMessageSystemHasPoweredOn:

break;

}

}

这样就可以保持iPhone在网络连接的状况下不睡眠了(当然,可能会比较费电 ^_^)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: