2016-10-23 6 views
0

Wi-Fi on/off 변경 사항을 감지하고 싶습니다. 아래의 코드는 제대로 작동하지만 브로드 캐스트 수신기의 몇 가지 반복을 거칩니다. 예를 들어, 설정에서 Wi-Fi를 켜면 부울 값을 coonected로 설정하면 false가 8 번, true가 2 번 나타납니다. 정상입니까?BroadcastReceiver에서 Wifi 변경시 여러 상태가 변경되는 이유

public class MainActivity extends AppCompatActivity { 
TextView wifistate = null; 

BroadcastReceiver broadcastReceiver; 
WifiManager wifi; 
Context context; 


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

    context = getApplicationContext(); 

    wifistate = (TextView) findViewById(R.id.wifistate); 
    wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 

    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 

      if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 
       NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
       boolean connected = info.isConnected(); 
       if (connected) { 
        Log.i("RCVR", "True"); 
        wifistate.setText("Connected"); 
       } else { 
        Log.i("RCVR", "False"); 
        wifistate.setText("Disconnected"); 
       } 

      } 
     } 
    }; 

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 
    registerReceiver(broadcastReceiver, intentFilter); 


} 

} 

여기에 반복이 있습니다. 최종 결과가 정확합니다.

enter image description here

+0

변경중인 'NetworkInfo'의 다른 필드가 있습니까? –

+0

난 그냥 설정에서 스위치를 켜기 -> 와이파이 – narb

+0

당신은 내 질문에 대답하지 않았다. –

답변

1

내가 전에 본 적이. 그래서 내가하는 일이 여기있다.

참고 : 수신기에 다른 action을 사용하고 있습니다. 와이파이 경우 또는하지 연결 한 경우

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 
     Bundle extras = intent.getExtras(); 

     if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      NetworkInfo networkInfo = (NetworkInfo) extras.get(ConnectivityManager.EXTRA_NETWORK_INFO); 
      boolean connected = info.isConnected(); 
      if (connected && isWifiConnected()) { 
       Log.i("RCVR", "True"); 
       wifistate.setText("Connected"); 
      } else { 
       Log.i("RCVR", "False"); 
       wifistate.setText("Disconnected"); 
      } 
     } 
    } 
}; 

확인 : 다음 수신기

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
registerReceiver(broadcastReceiver, intentFilter); 

: 여기

이 솔루션의

public static boolean isWifiConnected() { 
    ConnectivityManager cm = (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    return (cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI); 
} 

이 방법을 사용하면 연결하면 확인된다 WiFi 연결 여부를 확인할 수 있습니다.
나를 위해 작동하는 것 같습니다. 희망이 도움이됩니다.

+0

CONNECTIVITY_ACTION을 (를) 인식 할 수 없습니다. 다른 작업을 수행했지만 NETWORK_STATE_CHANGED_ACTION이 작동하는 것처럼 보입니다. min sdk 18을 사용하고 있습니다. – narb

+0

'NETWORK_STATE_CHANGED_ACTION'은 (는) WiFi 작업입니다. 'CONNECTIVITY_ACTION'은 WiFi, 이더넷, 데이터 등 모든 네트워크 유형을 대상으로합니다. 그래서 제가 실제로 여기서하고있는 일은 연결이 이루어 졌는지 확인한 다음 WiFi를 통해 연결되었는지 확인하는 것입니다. –

+0

코드를 적용했습니다. (내 코드처럼) 수신자에게 도착하지만 통과하지 못하는 경우 (action.equals (ConnectivityManager.CONNECTIVITY_ACTION)) – narb