Как программно узнать, использует ли iPhone 3G, 4G или GPRS соединение? Есть ли способ включить и отключить 3G-соединение программно?
Я хотел знать, как решить, находится ли мое устройство в сети 3G или GPRS/4G. Особенно, использует ли оно соединение 3G или нет? Есть ли способ сделать это программно?
Также я хотел включить и отключить 3G программно?
Это будет хорошо, даже если предлагается частный API.
Заранее спасибо.
2 ответа
Если вы не возражаете против использования частных API (Apple откажется от этого, если вы хотите продать его в AppStore), вы можете использовать приведенный ниже код. Тем не менее, он немного нестабилен при изменении сети.
void *libHandle=dlopen("/System/Library/PrivateFrameworks/SoftwareUpdateServices.framework/SoftwareUpdateServices",RTLD_LAZY);
Class SUNetworkMonitor = NSClassFromString(@"SUNetworkMonitor");
NSObject *networkMonitor=[SUNetworkMonitor sharedInstance];
// check if the class have the method currentNetworkType
if ( [networkMonitor respondsToSelector:@selector(currentNetworkType)] )
{
int t = (int)[networkMonitor performSelector:@selector(currentNetworkType)];
NSString *type = @"";
switch ( t ) {
case 0: type = @"NO-DATA"; break;
case 1: type = @"WIFI"; break;
case 2: type = @"GPRS/EDGE"; break;
case 3: type = @"3G"; break;
default: type = @"OTHERS"; break;
}
NSLog(@"Network type: %@", type);
}
dlclose(libHandle);
Ну, я могу взять первую часть вопроса.
В библиотеке разработчика iOS есть пример - Reachability. Посмотрите на Reachability.m, где указано, есть ли у вас соединение и тип соединения.