zoukankan      html  css  js  c++  java
  • iOS 检测网络状态 自动判断 认为提示网络改变

    检测网络状态

    在网络应用中,需要对用户设备的网络状态进行实时监控,目的是
    让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
    根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
    WIFI3G网络:自动下载高清图片
    低速网络:只下载缩略图
    没有网络:只显示离线的缓存数据

    苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态
    https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

    Reachability的使用步骤
    添加框架SystemConfiguration.framework
    这里写图片描述
    添加源代码
    这里写图片描述
    包含头文件

    1
    <code class="hljs ruleslanguage">#import "Reachability.h"</code>

    抽取工具类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <code class="hljs objectivec">常见用法
    // 是否WIFI
    + (BOOL) IsEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }
     
    // 是否3G
    + (BOOL) IsEnable3G {
        return ([[Reachability reachabilityForInternetConnectionen] currentReachabilityStatus] != NotReachable);
    }
    </code>

    网络监控

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <code class="hljs objectivec">[[NSNotificationCenter defaultCenter] addObserver:self
     selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    self.netReachability = [Reachability reachabilityForInternetConnection];
    [self.netReachability startNotifier];
     
    - (void)dealloc
    {
        [self.netReachability stopNotifier];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
    }
    </code>

    检测网络状态实例

    NetWorkTool工具类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <code class="hljs java">#import <foundation foundation.h="">
     
    @interface NetworkTool : NSObject
    /**
     *  是否WIFI
     */
    + (BOOL)isEnableWIFI;
     
    /**
     *  是否3G
     */
    + (BOOL)isEnable3G;
    @end
    </foundation></code>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <code class="hljs objectivec">#import "NetWorkTool.h"
    #import "Reachability.h"
     
    @implementation NetworkTool
    // 是否WIFI
    + (BOOL)isEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }
     
    // 是否3G
    + (BOOL)isEnable3G {
        return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
    }
    @end</code>

    实现类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <code class="hljs objectivec">#import "ViewController.h"
    #import "Reachability.h"
    #import "NetworkTool.h"
     
    @interface ViewController ()
    @property (nonatomic, strong) Reachability *reachability;
    @end
     
    @implementation ViewController
     
    - (void)viewDidLoad
    {
        [super viewDidLoad];
     
        // 监听网络状态发生改变的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
     
        // 获得Reachability对象
        self.reachability = [Reachability reachabilityForInternetConnection];
        // 开始监控网络
        [self.reachability startNotifier];
     
    }
     
    - (void)dealloc
    {
        [self.reachability stopNotifier];
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
     
    - (void)networkStateChange
    {
        NSLog(@"网络状态改变了");
        [self checkNetworkState];
    }
     
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self checkNetworkState];
    }</code>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <code class="hljs objectivec">#pragma mark - App应用程序网络类型改变就会调用
    - (void)networkStateChange
    {
        if ([NetWorkTool isEnableWIFI]) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示您" message:@"您现在网络环境为wifi!开始畅享吧!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alert show];
        } else if ([NetWorkTool isEnable3G]) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示您"  message:@"您现在网络环境为3G/4G网络!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alert show];
        } else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示您" message:@"您当前没有可连的网络或已经掉线!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alert show];
        }
  • 相关阅读:
    Java实现“睡排序”——线程池Executors的使用
    浅谈HashMap与线程安全 (JDK1.8)
    Ubuntu 16 Java Develop环境快速搭建
    Spring Boot在反序列化过程中:jackson.databind.exc.InvalidDefinitionException cannot deserialize from Object value
    Java 8 – Map排序
    vue指令优化网络图片加载速度
    如何实现小于12px的字体效果
    两种以上方式实现已知或者未知宽度的垂直水平居中
    C# winform窗体间传值(使用委托或事件)
    C#栈Stack的使用
  • 原文地址:https://www.cnblogs.com/sunfuyou/p/7770100.html
Copyright © 2011-2022 走看看