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>