【问题标题】:Checking if network is connect (wifi or mobile data) android java检查网络是否连接(wifi或移动数据)android java
【发布时间】:2021-08-30 12:10:19
【问题描述】:

我目前正在检测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


    【解决方案1】:

    查看determining and monitoring the connectivity status的官方文档。

    确定您是否有互联网连接

    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 Internet 连接检查 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);
      

      【讨论】:

        【解决方案3】:
            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")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多