IOS가 현재 네트워크 상태를 판단하는 세 가지 방법을 자세히 설명합니다.
1. Reachability
이것은 애플의 공식 프레젠테이션 데모에서 사용하는 방법이다. 우리는 애플의 공식 문서에서 데모(왼쪽 상단 다운로드 샘플 코드를 누르면 다운로드)를 다운로드한 다음에 데모의 Reachability를 다운로드할 수 있다.h와.m 자신의 프로젝트에 합격하고 Build Phases의 Link Binary에 SystemConfiguration을 추가합니다.프레임워크 프레임워크, 그리고 사용할 곳에서 Reachability 헤더 파일 가져오기
Reachability 헤더 파일에서 네트워크, 와이파이, 벌집망 세 개의 네트워크 상태의 매거진 값을 볼 수 있습니다. 다음과 같습니다.
typedef enum : NSInteger {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
(1) 네트워크 상태 가져오기
iOS 7 이전에는 사용자 네트워크가 벌집 네트워크일 때 3G, 4G 등 네트워크 유형을 판단할 수 없었고, iOS 7 이후에는 판단할 수 있었다
(NSString *)internetStatus {
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
NSString *net = @"WIFI";
switch (internetStatus) {
case ReachableViaWiFi:
net = @"WIFI";
break;
case ReachableViaWWAN:
net = @" ";
//net = [self getNetType ]; //
break;
case NotReachable:
net = @" ";
default:
break;
}
return net;
}
(2) 사용자가 휴대전화에 인터넷을 가지고 있을 때 구체적인 네트워크 유형을 판단한다
이때 시스템이 자체적으로 가지고 있는 API를 사용하여 2G, 3G, 4G인지 판단할 수 있다. 이것은 CTTelephony Network Info와 같은 종류로 사용해야 한다. 프로젝트에 CoreTelephony를 추가하는 것을 기억해야 한다.프레임워크, 헤더 파일 가져오기
- (NSString *)getNetType
{
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
NSString *currentStatus = info.currentRadioAccessTechnology;
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyGPRS"]) {
netconnType = @"GPRS";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyEdge"]) {
netconnType = @"2.75G EDGE";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){
netconnType = @"3G";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){
netconnType = @"3.5G HSDPA";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){
netconnType = @"3.5G HSUPA";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){
netconnType = @"2G";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){
netconnType = @"3G";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){
netconnType = @"3G";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){
netconnType = @"3G";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){
netconnType = @"HRPD";
}else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyLTE"]){
netconnType = @"4G";
}
}
이 방법으로 판단되는 벌집 네트워크 유형은 다음과 같습니다.CTRadioAccessTechnologyGPRS//는 2G와 3G 사이이며 2.5G라고도 하며 과도한 기술
CTRadioAccessTechnology Edge/EDGE는 GPRS에서 3세대 이동통신으로의 전환, EDGE는 2.75G
CTRadioAccessTechnologyWCDMA
CTRadioAccessTechnologyHSDPA//또는 3.5G(3?G)
CTRadioAccessTechnologyHSUPA//3G에서 4G까지의 과도한 기술
CTRadioAccessTechnologyCDMA1x //3G
CTRadioAccessTechnologyCDMAEVDORev0/3G 표준
CTRadioAccessTechnologyCDMAEVDORevA
CTRadioAccessTechnologyCDMAEVDORevB
CTRadio Access Technology HRPD//전신에서 사용하는 3G에서 4G까지의 진전 기술, 3.75G
CTRadioAccessTechnologyLTE//4G 근접
2. 시스템 statusBar를 통해 판단
이런 방법은 아이폰 X에서 궤멸을 일으킬 수 있다. 애플이 status Bar의 키 Path를 수정했기 때문에 얻은 물건은 nil로 현재 네트워크 상태를 붕괴//획득할 수 있다(아이폰 X에서 붕괴를 일으킬 수 있다)
+ (NSString *)networkingStatesFromStatebar {
// app , app
UIApplication *app = [UIApplication sharedApplication];
//iphone X
NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
int type = 0;
for (id child in children) {
if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
NSString *stateString = @"wifi";
switch (type) {
case 0:
stateString = @"notReachable";
break;
case 1:
stateString = @"2G";
break;
case 2:
stateString = @"3G";
break;
case 3:
stateString = @"4G";
break;
case 4:
stateString = @"LTE";
break;
case 5:
stateString = @"wifi";
break;
default:
break;
}
return stateString;
}
3. AFNetworking을 통해
이 방법은 AppDelegate에 쓰여 네트워크 상태가 변화할 때마다 알림을 보내고 네트워크 변화를 실시간으로 모니터링한 다음에 해당하는 처리를 할 수 있다
#pragma mark - ------------- -------------
- (void)monitorNetworking
{
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -1:
NSLog(@" ");
break;
case 0:
NSLog(@" ");
break;
case 1:
{
NSLog(@"GPRS ");
// ,
[[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"1" userInfo:nil];
}
break;
case 2:
{
NSLog(@"wifi ");
// ,
[[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"2" userInfo:nil];
}
break;
default:
break;
}
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
NSLog(@" ");
}else{
NSLog(@" ");
}
}];
}
이상은 IOS가 현재 네트워크 상태를 판단하는 세 가지 방법에 대한 상세한 내용입니다. IOS가 현재 네트워크 상태를 판단하는 것에 대한 더 많은 자료는 저희 기타 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS에서 ReplayKit 및 RTC 사용 방법응용된 소리와 아나운서의 소리를 포함한다.이 두 가지 수요를 감안하여 우리는 스크린 공유를 하는 생방송에 필요한 미디어 흐름을 간단하게 분석할 수 있다. 만약 우리가 Audio App과 Audio Mic를 두 개의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.