解决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在网络连接的状况下不睡眠了(当然,可能会比较费电 ^_^)。
下面的代码可能会帮你解决这个问题。
以下代码摘自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在网络连接的状况下不睡眠了(当然,可能会比较费电 ^_^)。
相关文章推荐
- 解决iPhone网络软件在睡眠情况断线问题
- 解决iPhone网络软件在睡眠情况断线问题
- 解决iPhone网络软件在睡眠情况断线问题
- 解决iPhone网络软件在睡眠情况断线问题
- 解决iPhone网络软件在睡眠情况断线问题
- 解决iPhone网络软件在睡眠情况断线问题
- iPhone网络软件在睡眠情况断线问题解决
- iPhone网络软件在睡眠情况断线 已解决
- iPhone网络软件防止机子进入睡眠(断线)
- Broadcom网卡linux系统下无法连接到网络问题(某种情况- -||)的解决办法
- 解决在iphone(ios7)中状态栏(Status bar)会覆盖(overlap)在软件(view)上的问题
- [iOS]解决React Native升级到 0.29 之后, iPhone 真机调试经常断线的问题
- iphone线程中使用异步网络的问题,以及如何用NSRunLoop来解决
- iphone线程中使用异步网络的问题,以及如何用NSRunLoop来解决
- 关于ubuntu“下载软件仓库信息失败 检查您的网络连接“问题的解决办法
- Android 全屏情况下 webview中输入框被软件盘遮挡问题解决方案