2010-09-09 2 views
6

사용자가 wifi 또는 3g 연결을 사용하지 않으면 내 앱이 다운되는 것을 원하지 않습니다. 내 애플 리케이션에서 이것을 런타임에 어떻게 잡을 수 있습니까?URL 연결을하기 전에 사용자가 3G/Wifi를 사용하는지 감지하는 방법은 무엇입니까?

+5

[ 안드로이드에서 인터넷 연결을 확인하는 방법을 참조하십시오. ] (http://stackoverflow.com/questions/2326767/how-to-check-internet-conection-in-android). –

답변

7

먼저 ConnectivityManager 및 장치의 check the Wifi and 3G status에 대한 참조를 가져옵니다. 이 서비스를 사용하려면 ACCESS_NETWORK_STATE 권한이 필요합니다.

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (mWifi.isConnected() == false && mMobile.isConnected() == false) { 
     showDialog(DIALOG_NETWORK_UNAVAILABLE); 
    } 
1

connManager.getNetworkInfo (ConnectivityManager.TYPE_WIFI)는 더 이상 사용되지 않습니다.

아래는 최신 안드로이드 SDK를위한 향상된 솔루션입니다.

ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); 
     boolean is3gEnabled = false; 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Network[] networks = connManager.getAllNetworks(); 
      for(Network network: networks) 
      { 
       NetworkInfo info = connManager.getNetworkInfo(network); 
       if(info!=null) { 
        if (info.getType() == ConnectivityManager.TYPE_MOBILE) { 
         is3gEnabled = true; 
         break; 
        } 
       } 
      } 
     } 
     else 
     { 
      NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
      if(mMobile!=null) 
       is3gEnabled = true; 
     }