1

是否有一种直接的方法可以在 iPhone 上“强行”关闭和重新打开网络连接(蜂窝和 WIFI)?我正在开发一个通过 Dropbox 同步的应用程序,并希望从丢失的连接中测试和调试我的错误恢复代码。

更新:我应该更具体一点,我想在 sw 中关闭它。例如,在向 Dropbox 发起请求后,我想通过关闭网络来模拟失败的下载。

4

2 回答 2

0

打开设置,然后打开飞行模式禁用所有网络连接;关闭以重新启用。

编辑:要使用 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];
}
于 2011-01-29T07:48:09.100 回答
0

要在软件中模拟失败的下载,只需在设置某些调试标志时在软件中过早关闭连接。

我更喜欢从 wifi 接入点拉电缆。

添加:

如果您的 wifi 接入点具有本地可访问的管理网页,并且您是管理员,您可能能够找出 HTTP(S) 序列来访问接入点 WAN 配置页面并禁用/重新启用 WAN。您可以在软件中完成所有这些工作。

于 2011-01-29T08:27:04.553 回答