2011-03-24 3 views
3

네트워크 연결 및 연결 해제를 알리고 내 응용 프로그램을 인터넷에 연결할 수 있는지 확인하려면 ConnectionManager.CONNECTIVITY_ACTION 수신기를 등록하십시오.문제 이해 CONNECTIVITY_ACTION 추가 정보

if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) { 
    // no connection! 
} else { 
    NetworkInfo activeNetInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
    if (activeNetInfo != null && activeNetInfo.isConnectedOrConnecting()) { 
     // active connection! 
    } else { 
     // no connection! 
    } 
} 

그러나, 내 응용 프로그램은 때때로 휴대 전화의 연결 상태를 잘못보고 할 수 있기 때문에 나는이 잘못하고 있다고 생각 : 전화가 너무 같은 활성 네트워크 연결이있는 경우 현재, 나는 확인한다. EXTRA_NETWORK_INFO에 대한 설명서를 읽으면이 추가로 반환 된 값이 null이면 연결이 없음을 나타냅니다. "... 연결 관리자가 다른 네트워크에 연결하려고 시도하고 있거나 이미 연결 한 경우 새 네트워크의 NetworkInfo는 추가로 전달됩니다. "(http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION). 내 응용 프로그램의 misreports 연결이의 CONNECTIVITY_ACTION 방송을 수신하기 직전, getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo()isConnectedOrConnecting() 체크 진정한 반환하는 NetworkInfo 객체를 반환 경우에 그러나

. 따라서 전화가 연결되어 있지만 CONNECTIVITY_BROADCAST을 통해 반품 된 NetworkInfo은 null입니다.

CONNECTIVITY_ACTION 수신 코드에서 내가 뭘 잘못하고 있니? EXTRA_NETWORK_INFO)의 값을 확인하지 않아야합니까? EXTRA_NO_CONNECTIVITY에 의지 할 수 있습니까?

도움을 주시면 감사하겠습니다.

+0

'EXTRA_NETWORK_INFO'은 (는) getActiveNetworkInfo() 또는 getAllNetworkInfo()를 사용합니다. http://developer.android.com/reference/android/net/ConnectivityManager.html#EXTRA_NETWORK_INFO –

답변

1

잘못된 것은 아니지만 isConnectedOrConnecting에서 오는 신뢰할 수있는 값은 false입니다.

메서드가 true를 반환하는 경우에도 네트워크에 연결할 수 있다고 보장 할 수는 없습니다.

실제로 Android가 실제로 연결되어 있다고보고하는 경우 연결이 작동하지 않는 것으로 보이기 위해 어떤 종류의 재시도 메커니즘을 구현해야합니다.

예를 들어 회사 WIFI 네트워크에 연결할 때 모든 요청이 회사 로그인 페이지로 리디렉션되는 경우가 여기에 해당됩니다. 안드로이드는 당신에게 활성 네트워크가 있다고 말해 주지만 쿼리는 분명 실패 할 것입니다.

직접 네트워크 연결을 사용하더라도 상황이 잘못 될 때를 대비하여 일종의 재시도 메커니즘을 사용하지 않으면 사실을 반환하기 위해 의존하는 것이 결코 좋은 생각이 아닙니다.

반면에이 메서드가 false를 반환하면 네트워크 연결이 해제 된 것입니다.

+0

isConnectedOrConnecting()의 반환을 신뢰해야한다면 내 CONNECTIVITY_ACTION 수신기에서 EXTRA_NETWORK_INFO가 null 인 경우 가정해야합니다. 활성 네트워크 연결이 있습니까? – skyler

+0

! activeNetInfo.isConnectedOrConnecting() 또는 activeNetInfo == null 인 경우에만이를 신뢰해야합니다. 그 시점에서 네트워크 연결이 100 % 확실합니다. true를 반환하면 연결이 설정되었음을 알 수 있습니다. 그러나 특정 호스트에 대한 실제 네트워크 연결을 보장하려면 직접 사용자 지정을 구현하거나 네트워크 호출에 대한 재시도 알고리즘을 구현해야합니다. – ddewaele

+0

필자는 귀하의 요지를 이해하지만 구체적인 경우에는 "연결이 끊어졌습니다"체크가 사실이라고 평가합니다. 왜냐하면 나는 브로드 캐스트의 설명서를 잘못 이해했기 때문입니다 : "연결이 끊어진 경우 연결 관리자가 연결을 시도하거나 이미 연결되어있는) 다른 네트워크에 새로운 네트워크 용 NetworkInfo도 추가로 전달됩니다. " 전화가 연결을 잃지 않고 대신 얻은 경우,이 여분은 전송되지 않는다는 것을 나타내는 것으로 보입니다. – skyler