Android 应用如何有效监控互联网连接?
在 Android 应用中,监控互联网连接的状态是一个常见的需求。以下是一些常用的方法和最佳实践,可以帮助你高效地实现这一功能:
ConnectivityManagerConnectivityManager 是 Android 提供的核心 API,用于检查网络连接状态。
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.Network;
public class NetworkUtil {
public static boolean isInternetAvailable(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
Network network = connectivityManager.getActiveNetwork();
if (network != null) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
return capabilities != null &&
(capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
}
}
return false;
}
}
ACCESS_NETWORK_STATE。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
BroadcastReceiver(Android 7.0 及以下版本)在 Android 7.0(API 级别 24)之前,可以使用 BroadcastReceiver 来监听网络变化。
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
// Handle connection state here
}
}
}
在 AndroidManifest.xml 中:
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
CONNECTIVITY_CHANGE 广播是静态广播,不再推荐使用。NetworkCallback(推荐方法)从 Android 5.0(API 级别 21)开始,可以使用 ConnectivityManager.NetworkCallback 来监听网络状态变化。
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
public class NetworkMonitor {
private ConnectivityManager.NetworkCallback networkCallback;
public void startMonitoring(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
// Network is available
}
@Override
public void onLost(Network network) {
super.onLost(network);
// Network is lost
}
};
connectivityManager.registerDefaultNetworkCallback(networkCallback);
}
public void stopMonitoring(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
如果你的项目中已经使用了 LiveData 或 RxJava,可以封装网络状态监控为可观察对象。
import android.app.Application;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import androidx.lifecycle.LiveData;
public class NetworkLiveData extends LiveData<Boolean> {
private final ConnectivityManager connectivityManager;
private final ConnectivityManager.NetworkCallback networkCallback;
public NetworkLiveData(Application application) {
connectivityManager =
(ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
postValue(true);
}
@Override
public void onLost(Network network) {
postValue(false);
}
};
}
@Override
protected void onActive() {
super.onActive();
connectivityManager.registerDefaultNetworkCallback(networkCallback);
}
@Override
protected void onInactive() {
super.onInactive();
connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
NetworkCallback:这是 Android 官方推荐的方法,适合实时监控网络变化。BroadcastReceiver 静态注册。LiveData,与 MVVM 模式集成更简洁。根据应用需求选择适合的方法,同时注意兼容性和性能优化。
2025 年陆剧市场依旧热度爆棚
时间:2025-09-19
阵地央一首播:年度高品质大剧,深度解锁文化抗战三重非凡意义
时间:2025-09-18
陈展鹏刘佩玥《巨塔之后》今首播
时间:2025-08-28
生万物大结局惊现最招恨角色,原来真正的坏都披着善的“羊皮”!
时间:2025-08-28
归队6集燃爆:袁姗姗化身“战地玫瑰”,实战军医双在线超吸睛!
时间:2025-08-28
许凯田曦薇新剧《子夜归》首播,点击率位列第七
时间:2025-08-21