是否有一种直接的方法可以在 iPhone 上“强行”关闭和重新打开网络连接(蜂窝和 WIFI)?我正在开发一个通过 Dropbox 同步的应用程序,并希望从丢失的连接中测试和调试我的错误恢复代码。
更新:我应该更具体一点,我想在 sw 中关闭它。例如,在向 Dropbox 发起请求后,我想通过关闭网络来模拟失败的下载。
是否有一种直接的方法可以在 iPhone 上“强行”关闭和重新打开网络连接(蜂窝和 WIFI)?我正在开发一个通过 Dropbox 同步的应用程序,并希望从丢失的连接中测试和调试我的错误恢复代码。
更新:我应该更具体一点,我想在 sw 中关闭它。例如,在向 Dropbox 发起请求后,我想通过关闭网络来模拟失败的下载。
打开设置,然后打开飞行模式以禁用所有网络连接;关闭以重新启用。
编辑:要使用 iOS SDK(2.x 和 3.x)启用飞行模式,请尝试Erica Sadun 的代码:
#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#include <dlfcn.h>
#include <stdio.h>
// Framework Paths
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"
int main(int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//
// For testing try issuing the following:
// ap y; sleep 5; ./ap n
//
if (argc < 2)
{
printf("Usage: %s (y | n)\n", argv[0]);
exit(-1);
}
// Argument used to switch airplane mode off or on
BOOL yorn = [[[NSString stringWithCString:argv[1]]
uppercaseString] hasPrefix:@"Y"];
// Fetch the SpringBoard server port
mach_port_t *p;
void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
int (*SBSSpringBoardServerPort)() =
dlsym(uikit, "SBSSpringBoardServerPort");
p = SBSSpringBoardServerPort();
dlclose(uikit);
// Link to SBSetAirplaneModeEnabled
void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
int (*setAPMode)(mach_port_t* port, BOOL yorn) =
dlsym(sbserv, "SBSetAirplaneModeEnabled");
setAPMode(p, yorn);
dlclose(sbserv);
[pool release];
}
要在软件中模拟失败的下载,只需在设置某些调试标志时在软件中过早关闭连接。
我更喜欢从 wifi 接入点拉电缆。
添加:
如果您的 wifi 接入点具有本地可访问的管理网页,并且您是管理员,您可能能够找出 HTTP(S) 序列来访问接入点 WAN 配置页面并禁用/重新启用 WAN。您可以在软件中完成所有这些工作。