如何testingEDGE或GPRS或任何其他慢/坏的networking
在我的iOS应用程序中,我支持在线和离线工作。 为此,我使用了苹果的Reachability代码 。 现在,如果蜂窝移动networking是EDGE
或GPRS
或者networkingbad/slow
现在我想显示用户处于离线状态。 我已经使用了下面的代码(find解决scheme )。
码:
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new]; NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); [NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) { NSLog(@"New Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); }];
我使用3G cellular mobile network
进行设备testing,并取得了成功的CTRadioAccessTechnologyWCDMA
。 要testingEDGE
或GPRS
或任何其他slow/bad network
我使用设备的开发人员设置的networking链接条件 ,但仍然获得CTRadioAccessTechnologyWCDMA
价值。
编辑:
经过这么多的研究,我发现了另一种测量信号强度的方法。 我已经testing了它在iOS7设备上的工作,但不是在iOS8.4设备。 另外我觉得这是私人API,所以苹果可能会拒绝这个。
这是我的代码:
#import <CoreTelephony/CTTelephonyNetworkInfo.h> #import <dlfcn.h> int CTGetSignalStrength(); @implementation ViewController -(int) getSignalStrength { void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY); int (*CTGetSignalStrength)(); CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength"); if( CTGetSignalStrength == NULL) NSLog(@"Could not find CTGetSignalStrength"); int result = CTGetSignalStrength(); dlclose(libHandle); return result; } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; } -(void)updateLabel{ _lblSpeed.text = [NSString stringWithFormat:@"signal strength: %d\n", CTGetSignalStrength()]; NSLog(@"signal strength: %d\n", CTGetSignalStrength()); } @end
那么,任何想法如何我们可以testingEDGE
或GPRS
或任何其他slow/bad network
? 还有其他解决scheme/想法吗?