成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鴻蒙系統(tǒng)獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)以及監(jiān)聽網(wǎng)絡(luò)狀態(tài)

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[393146]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

一、前言

在應(yīng)用開發(fā)過程中,總是需要獲取網(wǎng)絡(luò)狀態(tài),當(dāng)前是否有網(wǎng)絡(luò),當(dāng)前是使用數(shù)據(jù)網(wǎng)絡(luò)還是使用無線網(wǎng)絡(luò)。鴻蒙提供了一系列方法來獲取網(wǎng)絡(luò)狀態(tài)。

二、添加權(quán)限

ohos.permission.GET_NETWORK_INFO 這個(gè)權(quán)限用于獲取網(wǎng)絡(luò)信息。

ohos.permission.INTERNET 這個(gè)權(quán)限用于訪問網(wǎng)絡(luò)1.2。

這兩個(gè)權(quán)限不需要?jiǎng)討B(tài)申請(qǐng),只需要在配置文件中聲明即可。

添加權(quán)限的方式查看下圖,如果你沒辦法像下圖一樣的操作,請(qǐng)把編譯器升級(jí)到最新版。

三、獲取網(wǎng)絡(luò)狀態(tài)

3、1 獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)

下面的類可以獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài),并且可以判斷能否上網(wǎng)。有時(shí)我們連接了一個(gè)網(wǎng)絡(luò),但由于網(wǎng)絡(luò)已經(jīng)到期(該交錢了)或者代理不可用,設(shè)備雖然連接了網(wǎng)絡(luò),但是不能上網(wǎng)。

  1. public class NetworkUtil { 
  2.  
  3.     /** 
  4.      * 網(wǎng)絡(luò)是否連接 
  5.      * 
  6.      * @param context 上下文 
  7.      * @return true表示網(wǎng)絡(luò)已經(jīng)連接,并且可以上網(wǎng)。false表示網(wǎng)絡(luò)沒連接,或者網(wǎng)絡(luò)連接了,但是不能上網(wǎng) 
  8.      */ 
  9.     public static boolean isNetworkConnectedInternet(Context context) { 
  10.         NetManager netManager = NetManager.getInstance(context); 
  11.         NetCapabilities netCapabilities = netManager.getNetCapabilities(netManager.getDefaultNet()); 
  12.         // NetCapabilities.NET_CAPABILITY_VALIDATED表示連接了網(wǎng)絡(luò),并且可以上網(wǎng) 
  13.         return netCapabilities.hasCap(NetCapabilities.NET_CAPABILITY_VALIDATED); 
  14.     } 
  15.  
  16.     /** 
  17.      * 是否是WiFi連接 
  18.      * 
  19.      * @param context 上下文 
  20.      * @return true表示W(wǎng)iFi連接,并且可以上網(wǎng)。false表示W(wǎng)iFi沒連接,或者WiFi連接了,但是不能上網(wǎng) 
  21.      */ 
  22.     public static boolean isWifiConnectedInternet(Context context) { 
  23.         // 獲取網(wǎng)絡(luò)管理對(duì)象 
  24.         NetManager netManager = NetManager.getInstance(context); 
  25.         // 獲取NetCapabilities對(duì)象 
  26.         NetCapabilities netCapabilities = netManager.getNetCapabilities(netManager.getDefaultNet()); 
  27.         // NetCapabilities.NET_CAPABILITY_VALIDATED表示連接了網(wǎng)絡(luò),并且可以上網(wǎng) 
  28.         return netCapabilities.hasCap(NetCapabilities.NET_CAPABILITY_VALIDATED) && 
  29.                 netCapabilities.hasBearer(NetCapabilities.BEARER_WIFI) || 
  30.                 netCapabilities.hasBearer(NetCapabilities.BEARER_WIFI_AWARE); 
  31.     } 
  32.  
  33.     /** 
  34.      * 是否是數(shù)據(jù)網(wǎng)絡(luò)連接 
  35.      * 
  36.      * @param context 上下文 
  37.      * @return true表示數(shù)據(jù)網(wǎng)絡(luò)連接,并且可以上網(wǎng)。false表示數(shù)據(jù)網(wǎng)絡(luò)沒連接,或者數(shù)據(jù)網(wǎng)絡(luò)連接了,但是不能上網(wǎng) 
  38.      */ 
  39.     public static boolean isMobileConnectedInternet(Context context) { 
  40.         NetManager netManager = NetManager.getInstance(context); 
  41.         NetCapabilities netCapabilities = netManager.getNetCapabilities(netManager.getDefaultNet()); 
  42.         // NetCapabilities.NET_CAPABILITY_VALIDATED表示連接了網(wǎng)絡(luò),并且可以上網(wǎng) 
  43.         return netCapabilities.hasCap(NetCapabilities.NET_CAPABILITY_VALIDATED) && 
  44.                 netCapabilities.hasBearer(NetCapabilities.BEARER_CELLULAR); 
  45.     } 
  46.  
  47.     /** 
  48.      * 這種方式也可以判斷網(wǎng)絡(luò)是否連接 
  49.      * 
  50.      * @param context 上下文 
  51.      * @return 只要網(wǎng)絡(luò)已經(jīng)連接,就返回true,不管能不能上網(wǎng)。有時(shí)我們連接了一個(gè)網(wǎng)絡(luò),但由于網(wǎng)絡(luò)已經(jīng)到期(該交錢了)或者使用的代理不可用,設(shè)備雖然連接了網(wǎng)絡(luò),但是不能上網(wǎng) 
  52.      */ 
  53.     public static boolean isNetworkConnected(Context context) { 
  54.         NetManager netManager = NetManager.getInstance(context); 
  55.         NetHandle[] allNets = netManager.getAllNets(); 
  56.         return allNets != null && allNets.length > 0; 
  57.     } 
  58.  
  59.     /** 
  60.      * 是否是WiFi連接 
  61.      * 
  62.      * @param context 上下文 
  63.      * @return 只要是WiFi連接,就返回true,不管能不能上網(wǎng)。有時(shí)我們連接了一個(gè)網(wǎng)絡(luò),但由于網(wǎng)絡(luò)已經(jīng)到期(該交錢了)或者使用的代理不可用,設(shè)備雖然連接了網(wǎng)絡(luò),但是不能上網(wǎng) 
  64.      */ 
  65.     public static boolean isWifiConnected(Context context) { 
  66.         // 獲取網(wǎng)絡(luò)管理對(duì)象 
  67.         NetManager netManager = NetManager.getInstance(context); 
  68.         // 獲取NetCapabilities對(duì)象 
  69.         NetCapabilities netCapabilities = netManager.getNetCapabilities(netManager.getDefaultNet()); 
  70.         return netCapabilities.hasBearer(NetCapabilities.BEARER_WIFI) || 
  71.                 netCapabilities.hasBearer(NetCapabilities.BEARER_WIFI_AWARE); 
  72.     } 
  73.  
  74.     /** 
  75.      * 是否是數(shù)據(jù)網(wǎng)絡(luò)連接 
  76.      * 
  77.      * @param context 上下文 
  78.      * @return 只要是數(shù)據(jù)網(wǎng)絡(luò)連接,就返回true,不管能不能上網(wǎng)。有時(shí)我們連接了一個(gè)網(wǎng)絡(luò),但由于網(wǎng)絡(luò)已經(jīng)到期(該交錢了),設(shè)備雖然連接了網(wǎng)絡(luò),但是不能上網(wǎng) 
  79.      */ 
  80.     public static boolean isMobileConnected(Context context) { 
  81.         NetManager netManager = NetManager.getInstance(context); 
  82.         NetCapabilities netCapabilities = netManager.getNetCapabilities(netManager.getDefaultNet()); 
  83.         return netCapabilities.hasBearer(NetCapabilities.BEARER_CELLULAR); 
  84.     } 

3、2 獲取實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài),監(jiān)聽網(wǎng)絡(luò)狀態(tài)

上面的方式只能獲取到當(dāng)前的網(wǎng)絡(luò)狀態(tài),并不能獲取到實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)。用戶可以隨時(shí)打開或者關(guān)閉網(wǎng)絡(luò),當(dāng)用戶打開或者關(guān)閉網(wǎng)絡(luò)的時(shí)候,我們希望可以實(shí)時(shí)的獲取到網(wǎng)絡(luò)狀態(tài)。要想獲取到實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài),就需要對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)聽。

NetStatusCallback用于監(jiān)聽網(wǎng)絡(luò)的狀態(tài),可以繼承該類來監(jiān)聽網(wǎng)絡(luò)的狀態(tài)。它有以下幾個(gè)方法:

其中最為常用的方法為onAvailable,onLost,onCapabilitiesChanged方法。

自定義一個(gè)類,繼承NetStatusCallback。

  1. /** 
  2.  * @author 裴云飛 
  3.  * @date 2021/4/11 
  4.  */ 
  5. public class DefaultNetStatusCallback extends NetStatusCallback { 
  6.  
  7.     @Override 
  8.     public void onAvailable(NetHandle handle) { 
  9.         super.onAvailable(handle); 
  10.         LogUtils.d("yunfei""網(wǎng)絡(luò)連接成功"); 
  11.     } 
  12.  
  13.     @Override 
  14.     public void onBlockedStatusChanged(NetHandle handle, boolean blocked) { 
  15.         super.onBlockedStatusChanged(handle, blocked); 
  16.         LogUtils.d("yunfei""訪問的網(wǎng)絡(luò)阻塞狀態(tài)發(fā)生變化"); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void onLosing(NetHandle handle, long maxMsToLive) { 
  21.         super.onLosing(handle, maxMsToLive); 
  22.         LogUtils.d("yunfei""網(wǎng)絡(luò)正在丟失連接"); 
  23.     } 
  24.  
  25.     @Override 
  26.     public void onLost(NetHandle handle) { 
  27.         super.onLost(handle); 
  28.         LogUtils.d("yunfei""網(wǎng)絡(luò)已斷開連接"); 
  29.     } 
  30.  
  31.     @Override 
  32.     public void onUnavailable() { 
  33.         super.onUnavailable(); 
  34.         LogUtils.d("yunfei""網(wǎng)絡(luò)連接超時(shí)或網(wǎng)絡(luò)不可達(dá)"); 
  35.     } 
  36.  
  37.     @Override 
  38.     public void onCapabilitiesChanged(NetHandle handle, NetCapabilities networkCapabilities) { 
  39.         super.onCapabilitiesChanged(handle, networkCapabilities); 
  40.         LogUtils.d("yunfei""網(wǎng)絡(luò)狀態(tài)變化但仍舊是可用狀態(tài)"); 
  41.     } 
  42.  
  43.     @Override 
  44.     public void onConnectionPropertiesChanged(NetHandle handle, ConnectionProperties connectionProperties) { 
  45.         super.onConnectionPropertiesChanged(handle, connectionProperties); 
  46.         LogUtils.d("yunfei""網(wǎng)絡(luò)連接的屬性被修改"); 
  47.     } 

onCapabilitiesChanged(NetHandle handle, NetCapabilities networkCapabilities)是較為常用的網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí)的監(jiān)聽,其中的參數(shù)networkCapabilities有兩個(gè)常用的方法。

hasCap判斷網(wǎng)絡(luò)是否連接,有多個(gè)參數(shù)(具體的參數(shù)可查看NetCapabilities),其中常用參數(shù)如下:

hasBearer可以判斷網(wǎng)絡(luò)的類型,同樣有多個(gè)參數(shù)(具體的參數(shù)可查看NetCapabilities),其中常用參數(shù)如下:

onCapabilitiesChanged(NetHandle handle, NetCapabilities networkCapabilities)的具體使用如下:

  1. @Override 
  2.    public void onCapabilitiesChanged(NetHandle handle, NetCapabilities networkCapabilities) { 
  3.        super.onCapabilitiesChanged(handle, networkCapabilities); 
  4.        LogUtils.d("yunfei""網(wǎng)絡(luò)狀態(tài)變化但仍舊是可用狀態(tài)"); 
  5.        if (networkCapabilities.hasCap(NetCapabilities.NET_CAPABILITY_VALIDATED)) { 
  6.            // 網(wǎng)絡(luò)連接成功,并且可以上網(wǎng) 
  7.            if (networkCapabilities.hasBearer(NetCapabilities.BEARER_WIFI)|| 
  8.                    networkCapabilities.hasBearer(NetCapabilities.BEARER_WIFI_AWARE)) { 
  9.                LogUtils.d("yunfei""使用WiFi"); 
  10.            } else if (networkCapabilities.hasBearer(NetCapabilities.BEARER_CELLULAR) || 
  11.                    networkCapabilities.hasBearer(NetCapabilities.BEARER_ETHERNET)) { 
  12.                LogUtils.d("yunfei""使用數(shù)據(jù)網(wǎng)絡(luò)"); 
  13.            } else { 
  14.                // 其它網(wǎng)絡(luò),包括藍(lán)牙、VPN、LoWPAN等 
  15.                LogUtils.d("yunfei""其它網(wǎng)絡(luò)"); 
  16.            } 
  17.        } 
  18.    } 

定義好監(jiān)聽網(wǎng)絡(luò)的類后,就可以使用了。要想獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài),直接調(diào)用NetworkUtil類中的方法即可。要想獲取實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài),就需要添加監(jiān)聽,首先獲取網(wǎng)絡(luò)管理對(duì)象,然后添加監(jiān)聽,這樣就能實(shí)時(shí)的監(jiān)聽到網(wǎng)絡(luò)的狀態(tài)了。最后別忘了在onStop方法里面移除監(jiān)聽。

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3.     private NetManager netManager; 
  4.     private DefaultNetStatusCallback mDefaultNetStatusCallback = new DefaultNetStatusCallback(); 
  5.     @Override 
  6.     public void onStart(Intent intent) { 
  7.         super.onStart(intent); 
  8.         super.setUIContent(ResourceTable.Layout_ability_main); 
  9.         /* 
  10.          * 網(wǎng)絡(luò)是否連接,true表示網(wǎng)絡(luò)已經(jīng)連接,但未必可以上網(wǎng), 
  11.          * 有時(shí)我們連接了一個(gè)網(wǎng)絡(luò),但由于網(wǎng)絡(luò)已經(jīng)到期(該交錢了)或者使用的代理不可用, 
  12.          * 設(shè)備雖然連接了網(wǎng)絡(luò),但是不能上網(wǎng) 
  13.          */ 
  14.         boolean networkConnect = NetworkUtil.isNetworkConnected(this); 
  15.         // 是否是WiFi連接,只要是WiFi連接,就返回true,不管能不能上網(wǎng)。 
  16.         boolean wifiConnected = NetworkUtil.isWifiConnected(this); 
  17.         // 否是數(shù)據(jù)網(wǎng)絡(luò)連接,只要是數(shù)據(jù)網(wǎng)絡(luò)連接,就返回true,不管能不能上網(wǎng) 
  18.         boolean mobileConnected = NetworkUtil.isMobileConnected(this); 
  19.  
  20.         // 網(wǎng)絡(luò)是否連接,true表示網(wǎng)絡(luò)已經(jīng)連接,并且可以上網(wǎng) 
  21.         boolean networkConnectedInternet = NetworkUtil.isNetworkConnectedInternet(this); 
  22.         // 是否是WiFi連接,true表示W(wǎng)iFi連接,并且可以上網(wǎng) 
  23.         boolean wifiConnectedInternet = NetworkUtil.isWifiConnectedInternet(this); 
  24.         // 是否是數(shù)據(jù)網(wǎng)絡(luò)連接,true表示數(shù)據(jù)網(wǎng)絡(luò)連接,并且可以上網(wǎng) 
  25.         boolean mobileConnectedInternet = NetworkUtil.isMobileConnectedInternet(this); 
  26.  
  27.         /* 
  28.          * 下面的代碼用于獲取實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)。用戶可以隨時(shí)打開或者關(guān)閉網(wǎng)絡(luò),當(dāng)用戶打開或者關(guān)閉網(wǎng)絡(luò)時(shí), 
  29.          * 我們可以獲取實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài) 
  30.          */ 
  31.         // 獲取網(wǎng)絡(luò)管理對(duì)象 
  32.         netManager = NetManager.getInstance(this); 
  33.         // 添加監(jiān)聽,監(jiān)聽實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài) 
  34.         netManager.addDefaultNetStatusCallback(mDefaultNetStatusCallback); 
  35.     } 
  36.  
  37.     @Override 
  38.     public void onActive() { 
  39.         super.onActive(); 
  40.     } 
  41.  
  42.     @Override 
  43.     public void onForeground(Intent intent) { 
  44.         super.onForeground(intent); 
  45.     } 
  46.  
  47.     @Override 
  48.     protected void onStop() { 
  49.         super.onStop(); 
  50.         if (netManager != null) { 
  51.             // 移除監(jiān)聽 
  52.            netManager.removeNetStatusCallback(mDefaultNetStatusCallback); 
  53.         } 
  54.     } 

四、總結(jié)

本文主要是對(duì)獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)以及監(jiān)聽網(wǎng)絡(luò)狀態(tài)進(jìn)行講解,需要注意當(dāng)前的網(wǎng)絡(luò)狀態(tài)和實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)的區(qū)別。

最后奉上源碼,代碼運(yùn)行起來后,大家可以隨時(shí)打開或者關(guān)閉網(wǎng)絡(luò),以獲取實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)

博客地址

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2015-08-07 15:42:21

網(wǎng)絡(luò)監(jiān)聽源碼

2013-03-26 13:42:12

Android 監(jiān)聽網(wǎng)

2012-12-26 13:26:38

Android開發(fā)飛行模式

2010-12-23 14:42:54

網(wǎng)絡(luò)連接

2010-05-14 10:37:20

2010-01-28 15:49:17

Android判斷網(wǎng)絡(luò)

2024-04-16 00:13:52

JS網(wǎng)絡(luò)狀態(tài)ts類

2013-05-13 08:59:54

網(wǎng)絡(luò)管理網(wǎng)絡(luò)組件AT

2009-01-18 09:15:00

網(wǎng)絡(luò)管理遠(yuǎn)程監(jiān)控

2023-11-27 13:57:00

Linux用法

2020-11-11 10:25:51

Linuxss命令

2014-08-22 09:10:46

2021-12-31 13:02:33

netstatLinuxss

2015-05-14 14:51:58

OpenStack N系統(tǒng)狀態(tài)多租戶

2009-01-18 09:18:00

網(wǎng)絡(luò)狀態(tài)網(wǎng)絡(luò)信息

2009-07-04 20:16:50

2014-06-24 15:56:15

WhatsUp Gol網(wǎng)絡(luò)監(jiān)控

2020-05-27 11:10:54

KerasLSTM神經(jīng)網(wǎng)絡(luò)

2021-05-10 14:47:07

網(wǎng)絡(luò)安全美國勒索軟件

2021-05-11 09:00:59

美國燃油網(wǎng)絡(luò)網(wǎng)絡(luò)攻擊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品欧美 | 欧美一级久久 | 欧美精品一二区 | 精品福利在线 | 欧美在线观看一区 | 波多野结衣一区二区三区在线观看 | 欧美精品在线一区 | 黄a在线观看 | 国产精品激情 | 免费一区二区在线观看 | 人妖一区 | 欧美在线视频观看 | 日韩在线欧美 | 在线观看中文字幕av | 成人毛片一区二区三区 | 国产在线看片 | 91在线精品秘密一区二区 | 欧美三级免费观看 | 一区二区三区四区电影视频在线观看 | 久久久精品综合 | 国产一区二区视频在线观看 | 久久久激情 | 一区二区三区视频在线观看 | 亚洲一区二区电影在线观看 | 国产99视频精品免视看9 | 欧美一区免费 | 色伊人网 | 精品国产乱码久久久久久影片 | 影音先锋久久 | 在线视频一区二区三区 | 亚洲字幕在线观看 | 久久久夜色精品亚洲 | 最新日韩在线 | 国内精品视频在线观看 | 国产日韩欧美一区 | 丁香色婷婷 | 国产精品不卡一区二区三区 | 99精品视频免费在线观看 | 亚洲国产欧美一区二区三区久久 | 中文字幕不卡在线88 | 日本在线综合 |