2013-06-29 130 views
1

我试图设置一个布尔值为true,如果WiFi处于打开状态。我通过实现广播接收器来获取连接状态。但是,布尔值不止一次被设置为true。你能帮我解决这个问题吗?我只想在连接WiFi时将布尔值设置为true,并且仅在WiFi断开连接时设置为false。代码如下:WiFi状态更改

NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE)) 
       .getActiveNetworkInfo(); 
     if (info != null) { 
      Log.d("wifiRun", "Network available"); 
      ConnectivityManager conMan = (ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo.State wifi = null; 
      if (conMan.getNetworkInfo(1).isAvailable()) 
       wifi = conMan.getNetworkInfo(1).getState(); 
      if (wifi == NetworkInfo.State.CONNECTED) { 
        //|| wifi == NetworkInfo.State.CONNECTING) { 
       wifiState = true; 
       Log.d("wifiRun", "wifiState: " + wifiState); 

      } else { 
       wifiState = false; 
       Log.d("wifiRun", "wifiState: " + wifiState); 
      } 
     } 

清单:

<receiver android:name="com.aws.BatteryUsage.ServiceDefinition"> 
<intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
    </intent-filter> 
     </receiver> 

回答

3

看看一个这种方法。 Thiw将返回设备连接的网络名称。如果设备未连接,则返回“无”。根据您的需要,将字符串名称更改为boolean isConnected非常容易。这个对我有用。

public String getWifiName(Context context) { 
    String ssid = "none"; 
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
    if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED) { 
     ssid = wifiInfo.getSSID(); 
    } 
    return ssid; 
} 

这将需要获得许可在AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

它会为你工作。但是,如果您需要有关此方法的详细信息,read it here

而且你可以尝试从探索枚举:

NetworkInfo.DetailedState

他们描绘了很多不同的状态,你可能找到有用的。

+0

好主意。我是否应该在清单文件中提供任何权限? – madhu

+0

哦,是的 - 你说得对。我编辑帖子(添加所需的权限) –

+0

@JacekMilewski:我正在实施这项技术。非常感谢你。最后,我是否应该在清单中为此注册supplicant.CONNECTION_CHANGE_ACTION? – madhu