iOS開発-コードコールによるネットワークのモニタリング機能(AFNetworkReachabilityManagerベースのパッケージ)

3616 ワード

私たちはappを開発する際によくネットモニタリングの機能を使って、ネットの状態を判断し、異なる状態によって異なるイベントを処理します.例えば、WIFI接続時にハイビジョン画像をダウンロードし、4 Gトラフィック接続時にサムネイルだけをダウンロードし、ネットがない時にキャッシュデータを表示します.
アップルは、開発者がネットワークの状態を検出するのに便利なReachabilityというサンプルプログラムを公式に提供しており、自分でダウンロードして見ることができます.https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
しかし筆者はサードパーティのAFNetWorkingの中のAFNetworkReachabilityManagerというクラスを利用して、ネットワークのモニタリングを実現するのが好きなので、このクラスを再度カプセル化して、SZKNetWorkUtilsにカプセル化して、1つのコード呼び出しを実現してネットワークの状態を判断することができて、簡単で使いやすくて、みんなに分かち合います.(AFNetworkingというサードパーティがプロジェクトにインポートされたことを前提とし、AFNetWorkingリンク:https://github.com/AFNetworking/AFNetworking)
ViewControllerでmインポート
#import "SZKNetWorkUtils.h"


1つのコード呼び出しは、netStateをblockで返し、1は携帯電話のトラフィックがインターネットに接続されていることを示し、2はWIFIがインターネットに接続されていることを示し、0または-1はネットワークがないことを示し、netStateが傍受されていることを示し、netStateが変更されると自動的に対応する方法が実行されます.
   
    [SZKNetWorkUtils netWorkState:^(NSInteger netState) {
        switch (netState) {
            case 1:{
                NSLog(@"      ");
            }
                break;
            case 2:{
                NSLog(@"WIFI  ");
            }
                break;
            default:{
                NSLog(@"  ");
            }
                break;
        }
    }];



実現方法:SZKNetWorkUtils.h
#import 
#import 

typedef void(^netStateBlock)(NSInteger netState);


@interface SZKNetWorkUtils : NSObject

/**
 *      
 *
 *  @param block       
 *
 *  @return     
 */
+(void)netWorkState:(netStateBlock)block;

@end

SZKNetWorkUtils.mにインポート
#import "AFNetworkReachabilityManager.h"


#pragma mark----    
+(void)netWorkState:(netStateBlock)block;
{
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //   :         ,         startMonitoring  
    [manager startMonitoring];
    //     
    __block typeof(self) bself = self;
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        if (status==0||status==-1) {
            //     
            [bself showWarningView];
            // netState   block 
            block(status);
        }else{
            // netState   block 
            block(status);
        }
    }];
}
#pragma mark---          
+(void)showWarningView
{
    UIAlertView *alter=[[UIAlertView alloc]initWithTitle:@"  " message:@"    ,       " delegate:self cancelButtonTitle:@"  " otherButtonTitles:@"   ", nil];
    [alter show];
}
#pragma mark---alertView    
+(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex==0) {
        NSLog(@"  ");
    }else{
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    }
}


コードは比較的簡単で、皆さんは直接コピーして貼り付けることができて、完全なdemoをダウンロードすることができて、好きならstarの下で.SZKNetWorkUtilsリンク:https://github.com/18811314750/SZKNetWorkUtils
筆者の他の記事:iOSオンライン音楽再生SZKAVplayer(AVPlayerベースのパッケージ)http://www.jianshu.com/p/4e0ac2898de0
iOS開発-カメラとアルバムをすばやく呼び出し、砂箱の写真の保存と読み取りを実現http://www.jianshu.com/p/7ffc8844e956
iOS開発-コマンドライン実装によるGitHubへのローカルコードのアップロードhttp://www.jianshu.com/p/79b94add9057
iOS開発-コードコールによるキャッシュのクリーンアップ機能http://www.jianshu.com/p/5ebe4f21c486
不足や間違いがあれば、読者の皆様のご指摘をお待ちしております.QQ/微信:790057066.号:iOS_ケイ:http://www.jianshu.com/users/86b0ddc92021/latest_articlesGitHub個人ホームページ:https://github.com/18811314750皆さん、いらっしゃいませ、star、読んでくれてありがとう.