当前位置:首页 > 行业动态 > 正文

Android网络检查,如何检测与监控网络连接状态?

在Android中检查网络连接,可以使用 ConnectivityManager类。通过调用 getSystemService(Context.CONNECTIVITY_SERVICE)获取 ConnectivityManager实例,然后使用 isActiveNetworkMetered()方法判断是否有活动网络连接。

检查网络连接的方法

使用ConnectionManager方式

| 方法名 | 描述 | 代码示例 |

| –| –| –|

| isNetConnection(Context mContext) | 判断当前是否有网络连接,但如果该连接的网络无法上网,也会返回true。 | “`java

public static boolean isNetConnection(Context mContext) {

if (mContext!=null){

ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

boolean connected = networkInfo.isConnected();

if (networkInfo!=null&&connected){

if (networkInfo.getState()== NetworkInfo.State.CONNECTED){

return true;

}else{

return false;

}

}

}

return false;

“` |

使用NetworkCapabilities类方式(6.0以上)

| 方法名 | 描述 | 代码示例 |

| –| –| –|

Android网络检查,如何检测与监控网络连接状态?

| isNetSystemUsable(Context context) | 判断当前网络是否可用,而且是不耗时的方法。 | “`java

public static boolean isNetSystemUsable(Context context) {

boolean isNetUsable = false;

ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

NetworkCapabilities networkCapabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());

if (networkCapabilities != null) {

isNetUsable = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);

}

}

return isNetUsable;

“` |

检测网络是否能正常上网

注意:此方法需要在子线程调用,否则报错:android.os.NetworkOnMainThreadException

| 方法名 | 描述 | 代码示例 |

| –| –| –|

Android网络检查,如何检测与监控网络连接状态?

| isNetOnline() | 功能:检测当前URL是否可连接或是否有效,最多连接网络x次,如果x次都不成功,视为该地址不可用。 | “`java

private static URL url;

private static HttpURLConnection con;

private static int state = -1;

public static boolean isNetOnline() {

int counts = 0;

boolean isNetsOnline = true;

while (counts < 2) {

try {

url = new URL("https://www.baidu.com");

con = (HttpURLConnection) url.openConnection();

state = con.getResponseCode();

Log.e("FragmentNet", "isNetOnline counts: " + counts + "=state: " + state);

if (state == 200) {

isNetsOnline = true;

Android网络检查,如何检测与监控网络连接状态?

}

break;

} catch (Exception ex) {

isNetsOnline = false;

counts++;

Log.e("FragmentNet", "isNetOnline URL不可用,连接第 " + counts + " 次");

continue;

}

}

return isNetsOnline;

“` |

相关问题与解答

问题1:为什么在检测网络是否能正常上网时需要在子线程调用?

解答:在Android 4.0(API级别14)之后,不允许在主线程中进行网络操作,否则会抛出android.os.NetworkOnMainThreadException异常,为了确保应用的稳定性和响应性,需要在子线程中执行网络请求。

问题2:如何获取当前网络连接的类型信息?

解答:可以通过ConnectivityManagergetActiveNetworkInfo()方法获取当前的网络连接信息,然后调用getType()方法获取网络连接的类型。

ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
    int type = mNetworkInfo.getType(); // 获取网络类型,如ConnectivityManager.TYPE_WIFI等
}