溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS平臺判斷2G,3G,wifi網絡類型

發布時間:2020-07-31 14:42:49 來源:網絡 閱讀:5958 作者:iKingLai 欄目:移動開發

相信大家都有過類似的需求,需要判斷iOS上面當前連接的網絡是2G,3G還是wifi?大部分的做法是使用reachability這個類,但是這種做法有一個致命的缺點就是:無法區分2G和3G。雖然網上號稱有人可以準確的區分開,但是我自己測試,發現并非如此。而且reachability這種做法,需要連接到指定的一個網站,然后采用通知的方式來獲取連接的狀態,由此可見這種做法,既慢又復雜。下面就介紹一種簡單而又準確的方法。


首先定義一個枚舉來代表不同的網絡類型


typedef enum {

   NETWORK_TYPE_NONE= 0,

   NETWORK_TYPE_WIFI= 1,

   NETWORK_TYPE_3G= 2,

   NETWORK_TYPE_2G= 3,

}NETWORK_TYPE;


然后通過獲取手機信號欄上面的網絡類型的標志

+ (int)dataNetworkTypeFromStatusBar {


   UIApplication *app = [UIApplicationsharedApplication];

   NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];

   NSNumber *dataNetworkItemView = nil;


   for (id subview in subviews) {

       if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {

           dataNetworkItemView = subview;

           break;

       }

   }


int netType = NETWORK_TYPE_NONE;

NSNumber * num = [dataNetworkItemView valueForKey:@"dataNetworkType"];

if (num == nil) {


       netType = NETWORK_TYPE_NONE;


   }else{


int n = [num intValue];

if (n == 0) {

           netType = NETWORK_TYPE_NONE;

       }elseif (n == 1){

           netType = NETWORK_TYPE_2G;

       }elseif (n == 2){

           netType = NETWORK_TYPE_3G;

       }else{

           netType = NETWORK_TYPE_WIFI;

       }


   }


return netType;

}


注意:這里用到了私有的API,但是這個大家不用擔心,因為我的應用已經被審核通過了。


經過測試,上面的方法是非常簡單有效的,大家不妨自己實驗一下。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女