1. 程式人生 > >RealReachability實時監聽網路狀態

RealReachability實時監聽網路狀態

RealReachability優勢:

離線模式對網路連線狀態的要求比較苛刻,且實際場景經常會遇到“偽連線”的情況蘋果提供的Reachability面對此場景力不從心。多方研究後引入了ping能力(此方案流量開銷最小,也最簡單),實現了簡單的實際網路連線監測;後面經過提煉和優化,就有了這個框架。可以告訴大家的是,這個框架在appstore上架應用中已經經受了考驗,且經過了長時間的測試,可以放心使用。

在viewDidLoad 中新增通知

- (void)viewDidLoad {

[super viewDidLoad];

//提示資訊

self.view.backgroundColor = [UIColor purpleColor];

 UILabel *label= [[UILabel alloc] init];

label.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width);

label.text = @"請切換網路狀態,以檢視RealReachability對網路狀態的實時監控";

label.font = [UIFont boldSystemFontOfSize:17];

label.textAlignment = NSTextAlignmentCenter;

 label.numberOfLines = 0;

 [label  sizeToFit];

label.center = self.view.center;

[self.view addSubview:label];

//新增一個通知監聽網路狀態切換

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(networkChanged:)                                            name:kRealReachabilityChangedNotification  object:nil];

[GLobalRealReachability startNotifier];

}

網路改變通知

- (void)networkChanged:(NSNotification *)notification{

RealReachability *reachability= (RealReachability *)notification.object;

ReachabilityStatusstatus= [reachability currentReachabilityStatus];

//    ReachabilityStatuspreviousStatus= [reachability previousReachabilityStatus];

if(status== RealStatusNotReachable){  

  [self showNotificationMessageWithStatus:@"當前無聯網連線"];

}

if(status== RealStatusViaWiFi){    

[self showNotificationMessageWithStatus:@"已連線至WiFi"];

}

WWANAccessTypeaccessType= [GLobalRealReachability currentWWANtype];

if(status== RealStatusViaWWAN){

if(accessType== WWANType2G)    { 

       [self showNotificationMessageWithStatus:@"已連線2G"];   

 }else if(accessType== WWANType3G)    {    

    [self showNotificationMessageWithStatus:@"已連線3G"];   

 }else if(accessType== WWANType4G)    {    

    [self showNotificationMessageWithStatus:@"已連線4G"];  

  }else{     

   [self showNotificationMessageWithStatus:@"未知網路"];    

}

}

}

狀態切換後提示資訊

- (void)showNotificationMessageWithStatus:(NSString *)status{

UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"網路狀態改變"message:statusdelegate:selfcancelButtonTitle:nilotherButtonTitles:nil, nil];

// 顯示 UIAlertView[alert show];

// 新增延遲時間為 2 秒 然後執行 dismiss: 方法

[selfperformSelector:@selector(dismiss:)withObject:alertafterDelay:2];

}

實現dismiss方法

//實現dismiss方法

-(void)dismiss:(UIAlertView*)alert{

// 此處即相當於點選了 cancel 按鈕

[alert dismissWithClickedButtonIndex:[alert cancelButtonIndex]animated:YES];

}

//銷燬通知

-(void)dealloc{[GLobalRealReachability stopNotifier];[[NSNotificationCenter defaultCenter]removeObserver:self];

}

//關於reachability的優化版本

一. 關於目前reachability的缺點

1.現在很流行的公用wifi,需要網頁鑑權,鑑權之前無法上網,但本地連線已經建立;

2.存在了本地網路連線,但訊號很差,實際無法連線到伺服器;

3.iOS連線的路由裝置本身沒有連線外網。

原因: Reachability相關的框架在底層都是通過SCNetworkReachability來實現網路檢測的,所以無法檢測實際網路連線情況。

二. 優化方法(RealReachability)

連結: http://www.cocoachina.com/ios/20160224/15407.html1.

整合: pod'RealReachability'2.常用程式碼:

* 實時監控網路連線狀態的方法:

[GLobalRealReachability startNotifier];

[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(networkChanged:) name:@"kRealReachabilityChangedNotification"object:nil];

- (void)networkChanged:(NSNotification *)notification

{

RealReachability *reachability = (RealReachability *)notification.object;

ReachabilityStatus status = [reachability currentReachabilityStatus];if(status == NotReachable) {self.curStatusLabel.text = @"沒有網路";

}if(status == ReachableViaWiFi) {self.curStatusLabel.text = @"WiFi網路";

}if(status == ReachableViaWWAN) {self.curStatusLabel.text = @"3/4G網路";

}

}

* 手動檢測網路的方法

[GLobalRealReachability startNotifier];

- (IBAction)checkTheStatus:(id)sender {

[GLobalRealReachability reachabilityWithBlock:^(ReachabilityStatus status) {switch(status)

{caseNotReachable:

{

[[[UIAlertView alloc] initWithTitle:@"提示"message:@"沒有網路"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil, nil] show];break;

}caseReachableViaWiFi:

{

[[[UIAlertView alloc] initWithTitle:@"提示"message:@"WIFI"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil, nil] show];break;

}caseReachableViaWWAN:

{

[[[UIAlertView alloc] initWithTitle:@"提示"message:@"3G/4G"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil, nil] show];break;

}default:break;

}

}];

}

相關推薦

RealReachability實時網路狀態

RealReachability優勢: 離線模式對網路連線狀態的要求比較苛刻,且實際場景經常會遇到“偽連線”的情況蘋果提供的Reachability面對此場景力不從心。多方研究後引入了ping能力(此方案流量開銷最小,也最簡單),實現了簡單的實際網路連線監測;後面經過提

Swift實時網路狀態(更新到Swift3)

最近做個專案,需要實時的監聽網路連線狀態,網路連線斷開時需要提醒使用者手動開啟網路,網路重新連線上之後需要做些操作。身為小白的我感到很有壓力,所以就不自覺的又上度娘那裡去取經了。(哈哈,初學者嘛,大家理解)自己整理下,加深下印象以後也方便用 :) 下面直入正題,如何實現實時監聽網路連線

android 網路實時網路狀態變化 及 網路型別判斷

android 中 我們經常需要判斷 各種網路型別   然後需要給使用者做出相應的提示,一般網路型別有 2g ,3g,4g ,wifi,無網路等等。 1. 網路型別判斷 TelephonyManag

Android 通過註冊廣播,實時網路連線與斷開狀態的變化

很多時候我們都需要實時監聽網路狀態,當網路狀態發生變化之後立即通知程式進行不同的操作。 監聽廣播的兩種方式: (1)在AndroidManifest.xml配置檔案中宣告 <receiver android:name=".NetworkConn

Android 程式實時網路變化狀態

public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInst

Android開發動態的網路狀態的變化

主要思路:使用Android中的四大元件之:BrocastReceiver監聽網路狀態的變化。接收到網路狀態改變的廣播之後判斷當前的網路是否可用。 建立廣播接收器MyNetworkReceiver public class MyNetworkRecei

Uiautomator2網路狀態,連線指定Wi-Fi

工作中接觸到uiautomator測試框架,從1.0到2.0,改動還是挺大的,1.0是以jar的形式push到手機中,主要是已Eclipse開發為主,到了2.0則是以apk形式安裝到手機中,主要是以Android Studio開發為主,個人感覺還是2.0要強大,而且方便一些。

android 網路狀態的變化+Observer

平時我們在請求錯誤的情況下,通常會進行處理一下,一般來說,主要分為兩方面的錯誤: 1、沒有網路的錯誤 2、在有網路的情況下,我們客戶端的錯誤或者伺服器端的錯誤 今天這篇部落格主要闡述以下問題: 1、怎樣監聽網路狀態的變化,包括是否開啟WiFi,否開啟資料

廣播時刻網路狀態

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>public class MainActi

ios-通過Reachability網路狀態

Reachability實際上是蘋果公司對SCNetworkReachability API做的封裝,這個API被定義在SystemConfigure.framework庫中,網上可以去下Reacha

android 網路狀態的變化及實戰

android 監聽網路狀態的變化及實際應用 本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 平時我們在請求錯誤的情況下,通常會進行處理一下,一般來說,主要分為兩方面的錯誤 - 沒有網路的錯誤 - 在有網路的情況下,我們客

android網路狀態變化

許可權 uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” uses-permission android:name=”android.permission.INTER

APIcloud實時手機網路狀態

APIcloud實時監聽手機網路狀態, 上次遇到一個問題,是做一個視訊播放的時候,要獲取到當前網路狀態,在wifi的網路下直接播放,不是wifi的網路下,提示用當前網路播放,確定就要播放,取消就不播放。弄了一下,遇到一個問題當wifi的時候能正常播放,而沒wifi的時候你點選了播放確

進入App判斷網路狀態(非廣播實時)

//先寫一個工具類 public static boolean isConnection(Context context){ //得到管理網路的服務例項 ConnectivityManager connMgr = (ConnectivityManager)context.

獲取網路狀態,並設定廣播進行實時

哈哈,終於學會了怎麼插入程式碼模組了,接著上一篇文章來說說網路狀態的監聽,這裡主要用到廣播來實時監聽網路狀態,在全域性或者對應的活動上進行呼叫; 來直接上程式碼: /**註冊廣播*/ public void registerNetWorkReceiver(Launche

Android 網路連線狀態

Android手機在網路狀態發生改變的時候回傳送一條廣播。通過日誌列印,可以看到該條廣播的Action為:android.net.conn.CONNECTIVITY_CHANGE,但是在網路斷開和連線的時候或者由WIFI轉為行動網路的時候傳送的廣播的Action

安卓通過廣播實時當前網路狀況

需求: 當網路斷開或者連線上的時候,需要你的APP作出一定的響應,有時候還需要判斷當前網路的型別,wifi或者移動資料… 分析: 網路發生變化系統會發送廣播 通過註冊一個廣播接收

Java實現系統目錄實時更新。

warning xtend absolute ava single sdn data- sdk spl SDK1.7新增的nio WatchService能完美解決這個問題。美中不足是如果部署在window系統下會出現莫名其妙的文件夾占用異常導致子目錄監聽失效

java實時日誌寫入kafka

put article -c exti tab round 1.5 valueof max 目的 實時監聽某目錄下的日誌文件,如有新文件切換到新文件,並同步寫入kafka,同時記錄日誌文件的行位置,以應對進程異常退出,能從上次的文件位置開始讀取(考慮到效率,這裏是每

js 實時input中值變化

對象 不同 round 字符 實時 char div har 但是 摘自:http://blog.csdn.net/spy19881201/article/details/25537225 示例: <!DOCTYPE html> <html>