我目前正在检测WIFI是否连接,代码如下:
BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int wifiStateExtra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
Log.v("Log","Wifi Toggled");
}
};
IntentFilter intentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
context.registerReceiver(wifiStateReceiver, intentFilter);
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
当前,每当 wifi 打开或关闭时,此代码都会告诉我。我正在寻找这样的东西,只要我的网络状态发生变化,即当我有或没有连接(wifi或移动数据)到互联网时,它都会向我发送通知。我可以使用类似 NetworkManger 的东西来告诉我网络状态是否已更改吗?
查看官方文档以了解确定和监控连接状态。
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
(设备连接可以通过移动数据、WiMAX、Wi-Fi 和以太网连接提供)
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
面向 Android 7.0(API 级别 24)及更高版本的应用程序如果在清单中声明了广播接收器,则不会收到 CONNECTIVITY_ACTION 广播。如果应用程序使用 Context.registerReceiver() 注册其 BroadcastReceiver 并且该上下文仍然有效,则应用程序仍将收到 CONNECTIVITY_ACTION 广播。
Android 互联网连接检查 对于 API 29+
private static final String DEBUG_TAG = "NetworkStatusExample";
ConnectivityManager connMgr =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isWifiConn = false;
boolean isMobileConn = false;
for (Network network : connMgr.getAllNetworks()) {
NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
isWifiConn |= networkInfo.isConnected();
}
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
isMobileConn |= networkInfo.isConnected();
}
}
Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn);
Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);
val connMgr = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
var isWifiConn = false
var isMobileConn = false
for (network in connMgr.allNetworks) {
val networkInfo = connMgr.getNetworkInfo(network)
if (networkInfo!!.type == ConnectivityManager.TYPE_WIFI) {
isWifiConn = isWifiConn or networkInfo!!.isConnected
}
if (networkInfo!!.type == ConnectivityManager.TYPE_MOBILE) {
isMobileConn = isMobileConn or networkInfo!!.isConnected
}
}
Log.d("DEBUG_TAG", "Wifi connected: $isWifiConn")
Log.d("DEBUG_TAG", "Mobile connected: $isMobileConn")
要替换 Android 中已弃用的 isConnected() 方法,您可以将 hasTransport() 方法与 NetworkCapability 一起使用。
private void checkInternetConnection() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (capabilities != null) {
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
status.setText("Connected");
type.setText("Type: Wi-Fi");
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
status.setText("Connected");
type.setText("Type: Mobile Data");
} // Add more Transports
} else {
status.setText("Not Connected");
type.setText("Type: None of above");
}
}