检查网络是否连接(wifi或移动数据)android java

问题描述 投票:0回答:4

我目前正在检测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 的东西来告诉我网络状态是否已更改吗?

android networking
4个回答
3
投票

查看官方文档以了解确定和监控连接状态

确定您是否有互联网连接

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 广播。


2
投票

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);

0
投票
    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")

0
投票

要替换 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");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.