2013-06-29 215 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