亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android中判斷網絡連接是否可用及監控網絡狀態

2020-04-11 12:37:42
字體:
來源:轉載
供稿:網友

獲取網絡信息需要在AndroidManifest.xml文件中加入相應的權限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1)判斷是否有網絡連接

復制代碼 代碼如下:

public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}

2)判斷WIFI網絡是否可用
復制代碼 代碼如下:

public boolean isWifiConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWiFiNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWiFiNetworkInfo != null) {
return mWiFiNetworkInfo.isAvailable();
}
}
return false;
}

3)判斷MOBILE網絡是否可用
復制代碼 代碼如下:

public boolean isMobileConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mMobileNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobileNetworkInfo != null) {
return mMobileNetworkInfo.isAvailable();
}
}
return false;
}

4)獲取當前網絡連接的類型信息
復制代碼 代碼如下:

public static int getConnectedType(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
return mNetworkInfo.getType();
}
}
return -1;
}

在開發android應用時,涉及到要進行網絡訪問,時常需要進行網絡狀態的檢查,以提供給用戶必要的提醒。一般可以通過ConnectivityManager來完成該工作。
ConnectivityManager有四個主要任務
1、監聽手機網絡狀態(包括GPRS,WIFI, UMTS等)
2、手機狀態發生改變時,發送廣播
3、當一個網絡連接失敗時進行故障切換
4、為應用程序提供可以獲取可用網絡的高精度和粗糙的狀態
當我們要在程序中監聽網絡狀態時,只要一下幾個步驟即可:
1、定義一個Receiver重載其中的onReceive函數,在其中完成所需要的功能,如根據WIFI和GPRS是否斷開來改變空間的外觀
復制代碼 代碼如下:

connectionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Log.i(TAG, "unconnect");
// unconnect network
}else {
// connect network
}
}
};

2、在適當的地方注冊Receiver,可以在程序中注冊,在onCreate中調用如下函數即可:
復制代碼 代碼如下:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionReceiver, intentFilter);

3、在適當時取消注冊Receiver,可以在程序中取消,在onDestroye中調用如下函數即可:
復制代碼 代碼如下:

if (connectionReceiver != null) {
unregisterReceiver(connectionReceiver);
}

Ps:網上還有很多關于使用TelephonyManager 的方法的,方法如下(但是我試了好幾次都有問題,如每次第一次進入一個Activity時會自動收到網絡斷開的信號,每次網絡狀態改變時收到多次回調且狀態不正確。不知道有什么要注意的地方,求指點!)
復制代碼 代碼如下:

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.listen(new PhoneStateListener(){
@Override
public void onDataConnectionStateChanged(int state) {
switch(state){
case TelephonyManager.DATA_DISCONNECTED://網絡斷開
break;
case TelephonyManager.DATA_CONNECTING://網絡正在連接
break;
case TelephonyManager.DATA_CONNECTED://網絡連接上
break;
}
}
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

至于第二種方法,本人并沒有去嘗試過。第一種方式還是比較好用,如果要程序隱藏在后臺的話,建議開個service,將BroadcastReceiver注冊在service,但不要忘了取消注冊。
在測試中遇到過這樣的狀況,將一個當前連接wifi的路由設備關閉,但是程序并沒有捕捉到unconnect network,可能是因為手機設備立刻連接另一個路由設備了。
Android 監控網絡狀態
復制代碼 代碼如下:

public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.i("NetWorkState", "Unavailabel");
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
Log.i("NetWorkState", "Availabel");
return true;
}
}
}
}
return false;
}

上面這個方法就是判斷網絡是否連接的代碼,返回true表示有網絡,返回false表示無網絡。 在Android網絡應用程序開發中,經常要判斷網絡連接是否可用,因此經常有必要監聽網絡狀態的變化。android的網絡狀態監聽可以用BroadcastReceiver來接收網絡狀態改變的廣 播,具體實現如下:
復制代碼 代碼如下:

@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "網絡狀態改變");
boolean success = false;
//獲得網絡連接服務
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
// State state = connManager.getActiveNetworkInfo().getState();
State state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState(); // 獲取網絡連接狀態
if (State.CONNECTED == state) { // 判斷是否正在使用WIFI網絡
success = true;
}
state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState(); // 獲取網絡連接狀態
if (State.CONNECTED != state) { // 判斷是否正在使用GPRS網絡
success = true;
}
if (!success) {
Toast.makeText(LocationMapActivity.this, "您的網絡連接已中斷", Toast.LENGTH_LONG).show();
}
}

復制代碼 代碼如下:

//注冊網絡監聽
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);
//在Activity中的onDestroy中:'
unregisterReceiver(mNetworkStateReceiver); //取消監聽

很多朋友在android開發中,都會遇到手機網絡類型判斷,因為就目前的android平臺手機來說:可能會存在4中狀態
1.無網絡(這種狀態可能是因為手機停機,網絡沒有開啟,信號不好等原因)
2.使用WIFI上網
3.CMWAP(中國移動代理)
4.CMNET上網
這四種狀態,如果沒有網絡,肯定是無法請求Internet了,如果是wap就需要為手機添加中國移動代理,關于為手機添加中國移動的代理,請到
下面是網絡判斷的方法
復制代碼 代碼如下:

/**
* @author sky
* Email vipa1888@163.com
* QQ:840950105
* 獲取當前的網絡狀態 -1:沒有網絡 1:WIFI網絡2:wap網絡3:net網絡
* @param context
* @return
*/
public static int getAPNType(Context context){
int netType = -1;
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if(networkInfo==null){
return netType;
}
int nType = networkInfo.getType();
if(nType==ConnectivityManager.TYPE_MOBILE){
Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());
if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){
netType = CMNET;
}
else{
netType = CMWAP;
}
}
else if(nType==ConnectivityManager.TYPE_WIFI){
netType = WIFI;
}
return netType;
}

因為獲取的是服務對象,所以這個網絡狀態都是時時刷新的,所以我們只需要得到網絡狀態就可以了!
學習在于積累,希望和大家一起分享

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩免费精品视频| 在线观看精品国产视频| 亚洲影视九九影院在线观看| 亚洲成人a**站| 色在人av网站天堂精品| 日本人成精品视频在线| 日韩国产欧美区| 欧美日韩国产综合新一区| 中文字幕欧美日韩在线| 中文字幕亚洲情99在线| 国产综合视频在线观看| 亚洲第一在线视频| 亚洲最大福利视频网| 国产成人一区二| 在线日韩日本国产亚洲| 久久天天躁狠狠躁夜夜躁2014| 在线视频欧美日韩精品| 国产精品福利网| 91精品久久久久久| 亚洲男人天堂手机在线| 久久久99免费视频| 久久九九国产精品怡红院| 91精品视频在线播放| 精品久久香蕉国产线看观看亚洲| 欧美国产日韩精品| 色妞色视频一区二区三区四区| 欧美一级片免费在线| 7777免费精品视频| 国产亚洲精品久久久久久| 一本色道久久综合亚洲精品小说| 久久男人的天堂| 亚洲欧洲日本专区| 亚洲伊人一本大道中文字幕| 亚洲美女又黄又爽在线观看| 成人黄色在线播放| 亚洲**2019国产| 亚洲第一福利视频| 精品女同一区二区三区在线播放| 亚洲精品成a人在线观看| 亚洲高清一二三区| 亚洲视频在线播放| 久久久噜噜噜久噜久久| 日韩av一区在线观看| 日本精品一区二区三区在线播放视频| 青青精品视频播放| 亚洲综合在线做性| 亚洲天天在线日亚洲洲精| 成人精品网站在线观看| 欧美一级免费视频| 国产精品7m视频| 日韩专区中文字幕| 久久免费在线观看| 成人免费大片黄在线播放| 国模叶桐国产精品一区| 欧美日韩国产精品| 亚洲午夜精品视频| 国产精品永久免费| 亚洲欧洲激情在线| 在线看国产精品| www.亚洲天堂| 国产精品久久久久福利| 欧美—级a级欧美特级ar全黄| 91精品国产色综合久久不卡98口| 国产精品视频专区| 欧美在线激情视频| 国模极品一区二区三区| 亚洲福利视频专区| 日韩av一卡二卡| 77777亚洲午夜久久多人| 欧美性videos高清精品| 精品精品国产国产自在线| 国产一区av在线| 亚洲国内高清视频| 国产97在线亚洲| 久久精品国产欧美亚洲人人爽| 精品国产乱码久久久久酒店| 国产视频亚洲视频| 亚洲精品国产精品国产自| 久久99精品国产99久久6尤物| 欧美肥臀大乳一区二区免费视频| 懂色av影视一区二区三区| 欧美大胆在线视频| 亚洲成人av资源网| 亚洲欧洲中文天堂| 精品视频—区二区三区免费| 亚洲视频在线看| 欧美中文字幕在线视频| 国产精品免费久久久久久| 国产a∨精品一区二区三区不卡| 日韩精品一区二区视频| 亚洲国产一区二区三区四区| 日韩精品在线免费观看| 日韩中文字幕欧美| 亚洲男人的天堂网站| 欧美成人免费一级人片100| 亚洲精品动漫久久久久| 亚洲欧美制服另类日韩| 国产精品扒开腿做爽爽爽的视频| 久久视频这里只有精品| 日韩精品久久久久久福利| 4438全国亚洲精品在线观看视频| 亚洲第一精品电影| 国产成人一区二区三区| 久久激情视频久久| 国产狼人综合免费视频| www.久久撸.com| 日韩激情视频在线播放| 欧美又大粗又爽又黄大片视频| 国产一区二区欧美日韩| 国内精品美女av在线播放| 亚洲人成绝费网站色www| 国产成人在线播放| 日韩美女视频免费在线观看| 中文字幕亚洲一区在线观看| 91精品国产免费久久久久久| 国产精品自产拍高潮在线观看| 亚洲精品国产精品久久清纯直播| 青青久久av北条麻妃黑人| 98午夜经典影视| 成人中文字幕在线观看| 性欧美xxxx交| 日韩精品一区二区视频| 81精品国产乱码久久久久久| 精品国产福利视频| 黑人巨大精品欧美一区二区| 久久伊人精品一区二区三区| 欧美激情xxxxx| 青青草原成人在线视频| 在线播放精品一区二区三区| 91在线直播亚洲| 欧美日韩激情美女| 亚洲大尺度美女在线| 日韩成人av在线| 久久久久久久成人| 欧美xxxx综合视频| 美女少妇精品视频| 亚洲黄色有码视频| 国产精品久久网| 成人激情视频在线播放| 国产视频精品自拍| 午夜精品久久久久久久白皮肤| 91久久久久久久一区二区| 国产精品美女主播在线观看纯欲| 国产精品自在线| 亚洲欧美国产另类| 中文国产亚洲喷潮| 97在线日本国产| 欧美电影免费观看高清完整| 黄色成人在线播放| 69av在线视频| 2019中文字幕在线免费观看| 2019日本中文字幕| 55夜色66夜色国产精品视频| 亚洲欧美另类中文字幕| 日韩高清av在线| 久久久久久久国产精品| 久久国产精品久久久| 亚洲精品资源在线| 91tv亚洲精品香蕉国产一区7ujn| 亚洲成人中文字幕| 欧美日韩加勒比精品一区| 久久久久久久激情视频| 国产成人avxxxxx在线看| 欧美成人免费在线观看|