Android 判斷網絡狀態(tài)實例詳解
更新時間:2017年04月11日 10:53:16 投稿:lqh
這篇文章主要介紹了Android 判斷網絡狀態(tài)實例詳解的相關資料,需要的朋友可以參考下
Android 判斷網絡狀態(tài)實例詳解
實例代碼
package com.example.android;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.URL;
import java.util.Enumeration;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
public class NetStatus {
public static int NET_CNNT_BAIDU_OK = 1; // 正常訪問因特網狀態(tài)
public static int NET_CNNT_BAIDU_TIMEOUT = 2; // 無法訪問因特網狀態(tài)
public static int NET_NOT_PREPARE = 3; // 網絡未準備好
public static int NET_ERROR = 4;
private static int TIMEOUT = 3000;
/**
* 返回當前網絡狀態(tài)
*
* @param context
* @return
*/
public static int getNetState(Context context) {
try {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo networkinfo = connectivity.getActiveNetworkInfo();
if (networkinfo != null) {
if (networkinfo.isAvailable() && networkinfo.isConnected()) {
if (!connectionNetwork())
return NET_CNNT_BAIDU_TIMEOUT;
else
return NET_CNNT_BAIDU_OK;
} else {
return NET_NOT_PREPARE;
}
}
}
} catch (Exception e) {
}
return NET_ERROR;
}
/**
* 拼百度地址
*
* @return
*/
private static boolean connectionNetwork() {
boolean result = false;
HttpURLConnection httpUrl = null;
try {
httpUrl = (HttpURLConnection) new URL("http://www.baidu.com").openConnection();
httpUrl.setConnectTimeout(TIMEOUT);
httpUrl.connect();
result = true;
} catch (IOException e) {
} finally {
if (null != httpUrl) {
httpUrl.disconnect();
}
httpUrl = null;
}
return result;
}
/**
* 判斷當前網絡是否是3G網絡
*
* @param context
* @return boolean
*/
public static boolean is3G(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}
/**
* 判斷當前網絡是否是wifi網絡
*
* @param context
* @return boolean
*/
public static boolean isWifi(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
/**
* 判斷當前網絡是否是2G網絡
*
* @param context
* @return boolean
*/
public static boolean is2G(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null && (activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE
|| activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS
|| activeNetInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA)) {
return true;
}
return false;
}
/**
* wifi是否打開
*/
public static boolean isWifiEnabled(Context context) {
ConnectivityManager mgrConn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager mgrTel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return ((mgrConn.getActiveNetworkInfo() != null && mgrConn.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED)
|| mgrTel.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS);
}
/**
* 獲得本機ip地址
*
* @return
*/
public static String GetHostIp() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr.hasMoreElements();) {
InetAddress inetAddress = ipAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
} catch (Exception e) {
}
return null;
}
/**
* 獲取本機串號imei
*
* @param context
* @return
*/
public static String getIMEI(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return telephonyManager.getDeviceId();
}
}
添加權限:訪問網絡權限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/>
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:
- Android仿QQ微信實時監(jiān)測網絡狀態(tài)
- Android BroadcastReceiver實現網絡狀態(tài)實時監(jiān)聽
- Android檢查網絡狀態(tài)工具類詳解
- android 監(jiān)聽網絡狀態(tài)的變化及實戰(zhàn)的示例代碼
- Android判斷網絡狀態(tài)的代碼
- Android 判斷網絡狀態(tài)及開啟網路
- Android 監(jiān)聽網絡狀態(tài)方法詳解
- Android 廣播監(jiān)聽網絡狀態(tài)詳解及實例代碼
- Android中利用NetworkInfo判斷網絡狀態(tài)時出現空指針(NullPointerException)問題的解決方法
- Android使用觀察者模式Observer實現網絡狀態(tài)監(jiān)聽
相關文章
Android中Retrofit 2.0直接使用JSON進行數據交互
本篇文章主要介紹了Android中Retrofit 2.0直接使用JSON進行數據交互,具有一定的參考價值,有興趣的可以了解一下2017-08-08
解決Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題
對于現在的 App 來說,布局頁面基本都會用到沉浸式狀態(tài)欄,單純的沉浸式狀態(tài)欄很容易解決,但是在華為手機上存在一個底部虛擬按鍵的問題,會導致頁面底部和頂部出現很大的問題,下面通過本文給大家分享Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題,一起看看吧2017-07-07

