我想用wifi通过本地网络发送数据。在发送数据之前,我检查wifi状态,如果未启用,请询问用户并打开wifi。问题是,如果我打开wifi并尝试立即使用它,我就会有一个错误,因为wifi需要一些时间才能打开。
因此,正如我所想的,我需要打开wifi并设置当wifi进入启用状态时将调用的处理程序。但是WifiManager并没有为处理程序提供这种方法。我怎么能捕捉到无线网络状态的变化?
UPD
我如何打开无线网络:
WifiManager wifi = WifiUtils.getWifi( getApplicationContext() );
if (WifiUtils.isWifiEnabled( wifi)) return true;
wifi.setWifiEnabled(true);
//---
public static WifiManager getWifi( Context ctx)
{
return (WifiManager)ctx.getSystemService(ctx.WIFI_SERVICE);
}
public static boolean isWifiEnabled( WifiManager wifi)
{
if (wifi==null) return false;
if (wifi.getWifiState()!=wifi.WIFI_STATE_ENABLED) return false;
return true;
}发布于 2014-09-04 21:18:12
首先,如果您想检查wifi是否已连接,可以使用以下方法
ConnectivityManager cm = (ConnectivityManager) getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetwork != null && wifiNetwork.isConnected()) {
}
else{
//ask your user to turn on wifi
}现在,如果您想检查设备是否可以访问internet,即使wifi是开着的,那么您可以做如下的事情
if (wifiNetwork != null && wifiNetwork.isConnected()) {
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000);
int responseCode = conn.getResponseCode();
if(responseCode == 200){
//internet access
}
else {
//no internet access
}
}如果您希望处理wifi状态更改,则可以尝试无线或3g网络状态变化时的BroadcastReceiver或Android:收到连接性更改的通知。
但是,如果要以编程方式打开wifi,请参阅这个问题.Basically,则需要执行以下操作
WifiManager wManager = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wManager.setWifiEnabled(booleanValue); //true for on and false for off当然,您还需要在AndroidManifest.xml中添加必要的权限,例如
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> https://stackoverflow.com/questions/25675031
复制相似问题