2013-02-12 50 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