2015-11-02 114 views
0

伙计。Wi-Fi连接监听器

我的wifi监听器出现了一些问题。

我为此已使用BroadcastReceiver

这是我的代码。

public class WiFiService extends BroadcastReceiver { 

Context mcontext; 

@Override 
public void onReceive(Context mcontext, Intent intent) { 
    NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

    if(info != null) { 

     if(info.isConnected()) { 
      WifiManager wifiManager = (WifiManager)mcontext.getSystemService(Context.WIFI_SERVICE); 
      WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 

      Log.d("WifiConnection", "Connected"); 
      this.mcontext = mcontext; 

      Wifi(); 
     } 
    } 
} 

private void Wifi() { 
    WifiManager wifiManager = (WifiManager)mcontext.getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
    String bssid = wifiInfo.getBSSID(); 

    //Have something to do here. 

    Log.d("WifiConnection", "HomeWifi"); 
}} 

正如你所看到的,是有记录仪,上面写着ConnectedWifi

当我的手机连接到无线网络,th日志显示这样。

11-02 16:45:22.611 6678-6678/com.bedrock.live D/WifiConnection: Connected 
11-02 16:45:22.622 6678-6678/com.bedrock.live D/WifiConnection: HomeWifi 
11-02 16:45:22.627 6678-6678/com.bedrock.live D/WifiConnection: Connected 
11-02 16:45:22.627 6678-6678/com.bedrock.live D/WifiConnection: HomeWifi 
11-02 16:45:25.842 6678-6678/com.bedrock.live D/WifiConnection: Connected 
11-02 16:45:25.843 6678-6678/com.bedrock.live D/WifiConnection: HomeWifi 

它重复三次。任何想法只显示一次?

谢谢。

回答

1

我不认为有任何事情可以做,以避免它。广播由系统发送。不过,我认为你可以用一个布尔标志来破解它:

NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

if(info != null) { 

    if(info.isConnected() && !flagIsConnected) { 
     //state change from disconnected to connected 
     flagIsConnected = true; // set flag here to 
     WifiManager wifiManager = (WifiManager)mcontext.getSystemService(Context.WIFI_SERVICE); 
     WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 

     Log.d("WifiConnection", "Connected"); 
     this.mcontext = mcontext; 

     Wifi(); 
    }else if(!info.isConnected() && flagIsConnected){ 
     //state change from connect to disconnected 
     flagIsConnected = false; 
    } 
} 
+0

所以我应该使用这个'布尔flagIsConnected;'? –

+0

@BedrockDev是的,你应该使用国旗 –

+0

它显示这样的错误: –