2016-11-23 6 views
0

내 앱은 무료 공중 와이파이 네트워크가있는 작업장/공항에서 작업해야합니다.사용자가 공중 와이파이에 연결되었을 때를 감지하는 방법 승인되지 않은 와이파이 사용시

웹 브라우저를 통해 무선 인터넷 사용 기간을 승인해야하는지 사용자에게 알려 드리고자합니다.

나는 정보를 추출하려고하지만 이전과 웹 브라우저를 클릭 한 후 확인하면
public static void haveNetworkConnection(Context mContext) { 
    ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 


    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      // connected to wifi 
      Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
      printWifiInformation(activeNetwork); 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      // connected to the mobile provider's data plan 
      Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
     } 
    } else { 
     Toast.makeText(mContext, "Not connected", Toast.LENGTH_SHORT).show(); 
    } 
} 

public static void printWifiInformation(NetworkInfo activeNetwork){ 

    System.out.println("************************************************************************************"); 
    System.out.println("1 . describeContents   " + activeNetwork.describeContents()); 
    System.out.println("2 . getDetailedState   " + activeNetwork.getDetailedState()); 
    System.out.println("3 . getExtraInfo    " + activeNetwork.getExtraInfo()); 
    System.out.println("4 . getReason    " + activeNetwork.getReason()); 
    System.out.println("5 . getState     " + activeNetwork.getState()); 
    System.out.println("6 . getSubtype    " + activeNetwork.getSubtype()); 
    System.out.println("7 . getSubtypeName   " + activeNetwork.getSubtypeName()); 
    System.out.println("8 . getSubtypeName   " + activeNetwork.getSubtypeName()); 
    System.out.println("9 . getType     " + activeNetwork.getType()); 
    System.out.println("10. getTypeName    " + activeNetwork.getTypeName()); 
    System.out.println("11. isAvailable    " + activeNetwork.isAvailable()); 
    System.out.println("12. isConnected    " + activeNetwork.isConnected()); 
    System.out.println("13. isConnectedOrConnecting " + activeNetwork.isConnectedOrConnecting()); 
    System.out.println("14. isFailover    " + activeNetwork.isFailover()); 
    System.out.println("15. isRoaming    " + activeNetwork.isRoaming()); 
    System.out.println("************************************************************************************"); 

} 

내가 같은 결과를 얻었다이 경우를 분리하기 위해 모든 속성/정보를 찾지 못했습니다. , 감사를 알려주십시오, 루터

+0

이 서버에 "핑 (ping)"을 시도해 볼 수 있으며 현재 연결되어 있으면 작동하지 않습니다. –

답변

0

당신은 당신이 웹 포털벽으로 둘러싸인 정원 내부에 있는지 확인하기 위해 연결 검사를 수행하여 시작해야합니다.

꽤 좋은 설명은 here on SO입니다.

여전히 캡 티브 포털 자체에 대한 정보는 제공하지 않습니다.

그래서 당신은 수동으로 HttpUrlConnection 응답 헤더를 처리하고 리디렉션

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    try { 
    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    if (!url.getHost().equals(urlConnection.getURL().getHost())) { 

     // we were redirected! Kick the user out to the browser to sign on? 
    } 
    ... 
    } finally { 
    urlConnection.disconnect(); 
    } 

공식 문서로 네트워크 사인온, HTTP 인증 처리 등 examples의 시리즈를 제공 할만큼 관대를 찾아해야합니다 잘 쿠키 취급. 당신은 그것을보아야한다. 희망이 도움이됩니다!

+0

@koko 당신은 그것을 작동 시키도록 관리 했습니까? – HenriqueMS