2

나는 Wifi 방송 수신기를 사용하여 응용 프로그램을 개발했습니다. 내 요구 사항은 Wifi가 IP 주소를 얻음으로써 라우터에 연결되었을 때 Wifi가 이전에 연결된 라우터와 연결되어 있지 않을 때 다른 함수를 호출 할 때 함수 호출을 얻는 것입니다. wifi 방송 수신기 다중 목적

나는 방송 수신기를 등록하는

<action android:name="android.net.wifi.STATE_CHANGE" /> 

매니페스트이를 사용했다.

OnReceive에 방송 수신기 클래스의

는 :

NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
NetworkInfo.State state = networkInfo.getState(); 

if (state == NetworkInfo.State.CONNECTED) { 

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wi = wifiManager.getConnectionInfo(); 

    Log.e("++++WiFi Conected","++++WiFi Conected"); 

    Flags.wifiState = true; 
    updateWifiSyncTrue(context); 

    if (wi.getIpAddress() != 0) { 
     intent = new Intent(context, ConnectionService.class); 
     intent.putExtra("intentValue", "signalOn"); 
     intent.putExtra("bssId", wi.getBSSID()); 
     context.startService(intent); 
    } 
} 

if (state == NetworkInfo.State.DISCONNECTED) { 
    Log.e("++++WiFi DisConected","++++WiFi DisConnected"); 
    Flags.wifiState = false; 
    updateWifiSyncFalse(context); 
    updateRouterSyncFalse(context); 

    intent = new Intent(context, ConnectionService.class); 
    intent.putExtra("intentValue", "signalOff"); 
    context.startService(intent); 
} 

모든 것은 킷캣 까지 일하지만에 롤리팝 버전이 테스트 할 때를 위해 전화를 여러 번받을 수 있습니다.

나는 그것의 결과에 내 무선 랜을 켜면 같은 주 : 유휴 --Connecting-- 인증하는 - 포로 확인 - 연결 - 연결. 간혹 연결이 끊어 질 수도 있습니다.

해제하는 동안. 은 연결 - 연결 끊김 - 연결 끊김 - 연결 끊김 - NetworkInfo의 디버그 결과는 다음과 같습니다

끊김 :

[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/OBTAINING_IPADDR, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ  Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]. 

나는 친절하게 같은 날 도움을 요청합니다. wifi가 켜져있을 때 코드를 사용하면 CONNECTED 상태가 여러 번 실행되고 DISCONNECTED 상태이기도합니다.

WIFI가 꺼져있는 경우 연결됨 상태가 생성 된 후 4-5 연결이 끊긴 상태입니다.

I 테스트 용으로 HTC 전화를 사용했습니다.

나는 간단한 코딩을 사용했는데, 이것에 대한 더 깊은 상태 확인이 필요합니까? (자세한 상태 등 ...)

이 솔루션을 처리하는 가장 좋은 방법은 무엇입니까?

+0

수정 및 수정 해 주셔서 감사합니다. –

답변

3

인 텐트 필터 android.net.wifi.STATE_CHANGE을 사용할 때마다 브로드 캐스트 리시버가 여러 번 트리거됩니다. 예를 들어 Wi-Fi를 켜고있는 경우 브로드 캐스트의 onreceive은 1-5 번에서 여러 번 전화를 겁니다. 그래서, 그것은 당신에게 복수형 NetworkInfo.State.CONNECTED을주고 똑같은 연결을 끊습니다.

하나만 연결하거나 연결을 끊으려는 경우 부울 플래그를 사용하여 간단하게 wifi를 사용하도록 설정된 경우 남은 Wi-Fi 연결 의도를 무시하고 Wi-Fi 연결을 끊어야한다는 의미에서 올바르게 설정해야합니다.

+0

** 감사합니다 ** 답변은 Sivateja.koppineedi입니다. –