iOS用来获取设备上的网络状态(2G,3G,WIFI...)
来源:互联网 发布:绝地求生什么时候优化 编辑:程序博客网 时间:2024/06/13 23:13
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@property (nonatomic, copy) NSString *status;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[self class] networkingStatesFromStatebar];
[self AFNetWorkingStatus];
}
// 使用这种方法时一定要保证statusbar(状态栏)没有隐藏。如果你的App隐藏了statusbar,那么你也就不能通过这种方法获得网络状态。
+ (NSString *)networkingStatesFromStatebar {
// 状态栏是由当前app控制的,首先获取当前app
UIApplication *app = [UIApplication sharedApplication];
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"; //没有网络
NSLog(@"%@", stateString);
break;
case 1:
stateString = @"2G";
NSLog(@"%@", stateString);
break;
case 2:
stateString = @"3G";NSLog(@"%@", stateString);
break;
case 3:
stateString = @"4G";NSLog(@"%@", stateString);
break;
case 4:
stateString = @"LTE"; //比4G更快的蜂窝网
NSLog(@"%@", stateString);
break;
case 5:
stateString = @"wifi";
NSLog(@"%@", stateString);
break;
}
return stateString;
}
- (void)AFNetWorkingStatus
{
/**
AFNetworkReachabilityStatusUnknown = -1, //未知
AFNetworkReachabilityStatusNotReachable = 0, //无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WiFi
*/
// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == -1) {
//未知
self.status = @"您目前网络状态为:未知,请小心";
[self showalt];
} else if (status == 0) {
//无连接
self.status = @"您目前网络状态为:无连接";
[self showalt];
} else if (status == 1) {
//3g网络
self.status = @"您目前网络状态为供应商网络,请注意流量";
[self showalt];
} else if (status == 2) {
//wifi连接
self.status = @"您目前网络状态为:wifi,请放心浏览";
[self showalt];
}
}];
}
- (void)showalt
{
UIAlertController *al = [UIAlertController alertControllerWithTitle:@"提示" message:self.status preferredStyle:(UIAlertControllerStyleAlert)];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:nil];
[al addAction:cancel];
[self presentViewController:al animated:YES completion:nil];
}
- iOS用来获取设备上的网络状态(2G,3G,WIFI...)
- iOS获取设备网络状态,2G,3G,4G,wifi,非Reachability
- 安卓获取手机的网络状态(wifi,2g,3g,4g)
- iOS获取网络状态,区分2G、3G、4G、WIFI,非reachability
- iOS - 检测当前网络状态 - 无网络/2G/3G/4G/WIFI
- 根据状态栏获取网络状态,区分2G、3G、4G、WIFI
- iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
- iOS-检测监听网络状态(WIFI、2G/3G/4G)
- iOS开发-Reachability实时检测Wifi,2G/3G/4G/网络状态
- 状态栏通知网络链接的情况(wifi 2g/3g/4g/无网络链接状态)
- iOS获取当前网络类型(Wifi、2G、3G、4G)
- 获取手机当前的联网状态2G/3G/4G/WIFI
- android网络状态判断(wifi、3G、2G)
- android网络状态判断(wifi、3G、2G)
- 判断网络状态,2G,3G,Wifi
- 检测当前网络状态,,2g,,3g,,WiFi
- iOS开发测试不同的网络环境2G/3G/4G/WiFi
- IOS的网络提示(E\2G\3G\4G\WIFI\无网)
- 堆、栈
- Android Browser源码分析(一)Application初始化
- 面试相关之位运算
- 关于多线程之间的同步常用的三种方法
- iOS加速度传感器
- iOS用来获取设备上的网络状态(2G,3G,WIFI...)
- 解决 The same input jar is specified twice 问题
- UI基础UIButton
- SOA-面向服务架构
- jQuery自学教程(五)——事件对象
- WWDC2014之App Extensions学习笔记
- @Repository、@Service、@Controller 和 @Component
- C++学习笔记:为什么不要重载逻辑与和逻辑或&& || 操作符
- python string unicode字符串