2013-02-12 46 views
1

我想不斷檢查手機是否連接到特定的無線網絡。我當然想到了一個服務和網絡的SSID,但是如何?不斷檢查無線網絡變化

+1

「不斷檢查」?你知道會殺死多少電池嗎? [只需檢查一次](http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html)然後[註冊一個接收器來檢查連接性的變化](http:// stackoverflow。 COM /問題/ 3307237 /何燦的i-監視器的網絡連接狀態 - 在 - 機器人)。 – Eric 2013-02-12 18:48:35

+0

有WiFi_STATE_CHANGED廣播。您可以使用該廣播來檢測WiFi網絡中的更改。 – VendettaDroid 2013-02-12 18:49:52

+0

@尼克好吧你是對的我的意思是實際上每5分鐘。 – incredikid 2013-02-12 18:51:02

回答

4

你會想

<intent-filter> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
<action android:name="android.net.wifi.STATE_CHANGE"/> 
</intent-filter> 

在您的接收器標籤。

或者,如果你想對更多的控制權,之前註冊廣播接收器設置這些:

final IntentFilter filters = new IntentFilter(); 
filters.addAction("android.net.wifi.WIFI_STATE_CHANGED"); 
filters.addAction("android.net.wifi.STATE_CHANGE"); 
super.registerReceiver(yourReceiver, filters); 

WIFI_STATE_CHANGED

廣播意圖的行動表明的Wi-Fi已啓用,禁用,啓用,禁用或未知。一個額外的提供了這個狀態作爲一個int。如果可用,另一個額外提供以前的狀態。

STATE_CHANGE

廣播意圖的行動表明Wi-Fi連接的狀態已經改變。一個額外的提供了一個NetworkInfo對象形式的新狀態。如果新狀態爲「連接」,則額外的額外資源可以提供接入點的BSSID和WifiInfo。作爲一個字符串

此外,您還需要指定正確的權限:

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

全部代碼:Download

AndroidManifest.xml中

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.temp.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name="com.example.temp.MyWiFiStateListener"> 
     <intent-filter > 
      <action android:name="android.net.wifi.STATE_CHANGE"/> 
     </intent-filter> 
    </receiver> 
</application> 

MainActivity.java

package com.example.temp; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

廣播接收器:

package com.example.temp; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.util.Log; 

public class MyWiFiStateListener extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     String action = intent.getAction(); 
     Log.d("TEMP", action); 
     if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ 
      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
      if(info.getType() == ConnectivityManager.TYPE_WIFI){ 
       WifiManager myWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = myWifiManager.getConnectionInfo(); 
       Log.d("TEMP","BSSID :: " + wifiInfo.getBSSID() + "SSID :: " + wifiInfo.getSSID()); 
      } 
     } 
    } 

} 
+0

聽起來很不錯。我現在檢查一下。謝謝 – incredikid 2013-02-12 18:56:14

+0

讓我知道,如果你需要整個解決方案。 – VendettaDroid 2013-02-12 18:57:07

+0

好的我有點困惑。因此,如果我創建一個BroadcastReceiver並添加intent-filters,我將如何檢查BSSID? – incredikid 2013-02-12 19:27:50