我正在开发一个在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网络?
答案 0 :(得分: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" />
<强>参考文献:强>
答案 1 :(得分:0)
如果您确实需要WIFI连接来继续使用您的应用逻辑,则必须等待。说,你可以创建一个AsyncTask来处理“等待”的情况。
AsyncTask
会显示ProgressDialog
,表示无线连接状态。
如果用户必须手动切换wifi,AsyncTask将在 wifiEnabled = true 之后运行,并在manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()
== true时停止。
我不知道这个答案对你有帮助,但这是我对你问题的解释 小心,希望它有所帮助。