2014-09-04 61 views
0

我想通过使用wifi在本地网络上发送数据。在发送数据之前,我检查wifi状态,如果未启用,请询问用户并打开wifi。 问题是,如果我打开wifi并尝试立即使用它,我有一个错误,导致无线网络需要一段时间才能打开。Android - 如何以编程方式打开wifi并等到它未启用

所以,我认为,我需要打开wifi并设置当wifi进入启用状态时将被调用的处理程序。但WifiManager不提供这样的处理方法。我怎样才能赶上改变WiFi状态?

UPD

如何打开WiFi:

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

回答

2

首先,如果你要检查无线网络连接是否可以使用此

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 
} 

现在如果你想检查设备是否可以访问互联网,即使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状态的变化,那么你可以尝试BroadcastReceiver when wifi or 3g network state changedAndroid: Getting Notified of Connectivity Changes

但是,如果你想打开WiFi编程参考this SO question。基本上你需要做这样的事情

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>  
+0

我认为与某人的连接本身并不是一个好方法,也是因为我只需要访问本地网络。主要问题是,我打开后不知道如何处理wifi状态更改 – 2014-09-04 21:44:50

+0

与您有关的httpconnection同意。然而,为了处理wifi状态的变化,你是否参考了[无线或3G网络状态改变时的BroadcastReceiver](http://stackoverflow.com/questions/10733121/broadcastreceiver-when-wifi-or-3g-network-state-changed)? – 2014-09-04 21:50:24

+0

我发现你的解决方案在于我提供的那个链接的问题.OP已经发布了他的完整工作代码。你可以参考并解决你的问题。 – 2014-09-04 22:10:59

相关问题