1

我正在开发一个在wifi上切换的android应用程序,当它打开时会执行进一步的处理..

wifiManager.setWifiEnabled(true);

但条件..

wifiEnabled = wifiManager.isWifiEnabled();


if(wifiEnabled )
{ ...... }

总是返回 False,因为 wifi 需要时间重新连接我如何等到它重新启动或实际连接到 wifi 网络..

我知道我可以用来检查它是否实际连接或连接的条件。

Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();

我的两个问题?

1-等到wifi启用即打开?2-等到它真正连接到wifi网络?

4

2 回答 2

2

1-等到wifi启用即打开?2-等到它真正连接到wifi网络?

您可以为这两个事件创建BroadcastReceiver,然后执行特定操作:

public class WifiStateReceiver extends BroadcastReceiver {

   // action for Wi-Fi device status changes (enabled, disabled etc.)
   if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {

      // get actual status of Wi-Fi
      int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 
                                     WifiManager.WIFI_STATE_UNKNOWN);

     if (state == WifiManager.WIFI_STATE_ENABLED) {
        // do your stuff
     }

     ...

     // similar for WIFI_STATE_DISABLED
   }

   // action for connectivity changes (connected, disconnected etc.)
   if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {

      NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

      if (ni.getState().equals(NetworkInfo.State.CONNECTED)) {
         // do your stuff if is connected
      }

      ...

      // similar for DISCONNECTED
   }
}

如果您想了解更多的连接状态(正在连接、获取 IP 地址等),您需要使用:

networkInfo.getDetailedState();

这也取决于设备上的实际 API 级别。

最后,您需要这些用于 BroadcastReceiver 的 Intent 过滤器:

<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />

参考:

于 2013-10-03T09:56:20.497 回答
0

如果您真的需要 WIFI 连接来继续您的应用程序逻辑,您将不得不等待。也就是说,您可以创建一个 AsyncTask 来处理“等待”的情况。这AsyncTask将显示一个ProgressDialog指示 wifi 连接状态。

如果用户必须手动打开 wifi,AsyncTask 将在wifiEnabled = truemanager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()后运行,并在== true时停止。

我不知道这个答案是否对您有帮助,但这是我对您问题的解释。
保重,希望对你有帮助。

于 2013-10-03T09:59:37.803 回答