Как программно узнать, использует ли 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, где указано, есть ли у вас соединение и тип соединения.

Другие вопросы по тегам