2017-01-11 8 views
-1

인터넷 연결을 확인하는 빠르고 효과적인 방법을 찾고 있습니다. 인터넷 연결 상태를 찾기 위해 ping을 수행하는 것이 좋습니다.하지만 구글을 핑 (ping)하는 여러 가지 방법을 찾았고 모든 것을 사용하는 것이 혼란 스럽습니다. 아래에 제가 본 방법이 있습니다.Android : 활성 인터넷 연결을 확인하는 가장 효과적인 방법은 무엇입니까

방법 1 :

public boolean isOnline() { 
    Runtime runtime = Runtime.getRuntime(); 
    try { 
     Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
     int exitValue = ipProcess.waitFor(); 
     return (exitValue == 0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

방법 2 :

public Boolean isOnline() { 
    try { 
     Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
     int returnVal = p1.waitFor(); 
     boolean reachable = (returnVal==0); 
     return reachable; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

방법 3 :

public static boolean hasInternetAccess(Context context) { 
if (isNetworkAvailable(context)) { 
    try { 
     HttpURLConnection urlc = (HttpURLConnection) 
      (new URL("http://clients3.google.com/generate_204") 
      .openConnection()); 
     urlc.setRequestProperty("User-Agent", "Android"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(1500); 
     urlc.connect(); 
     return (urlc.getResponseCode() == 204 && 
        urlc.getContentLength() == 0); 
    } catch (IOException e) { 
     Log.e(TAG, "Error checking internet connection", e); 
    } 
} else { 
    Log.d(TAG, "No network available!"); 
} 
return false; 
} 

방법 4 :

public static boolean hasActiveInternetConnection(Context context) { 
if (isNetworkAvailable(context)) { 
    try { 
     HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(1500); 
     urlc.connect(); 
     return (urlc.getResponseCode() == 200); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Error checking internet connection", e); 
    } 
} else { 
    Log.d(LOG_TAG, "No network available!"); 
} 
return false; 
} 

어느 하나를 선택해야합니까 ?? 나는 더 빠르고 효과적인 방법이 필요하다.

+1

가능한 복제 [안드로이드에서 인터넷 연결을 확인 (네트워크하지 연결)] (http://stackoverflow.com/questions/41545504/check-internet-connection-in-android-not-network-connection) – W4R10CK

+0

참조 [Detect Internet Connection Status] (http://www.androidhive.info/2012/07/android-detect-internet-connection-status/)에 대한이 링크 –

+1

방법 1은 그 필요성을 우회하기 때문에 방법 1이라고 말하고 싶습니다. 기능적인 DNS 서버. 그러나 방법 1과 2는 그다지 다르지 않습니다. –

답변

-1

매번 연결을 확인하기 위해 브로드 캐스트를 사용하고 있습니다. 연결 정보에 대한 클래스를 만듭니다.

import android.content.Context; 
import android.content.ContextWrapper; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 


public class ConnectivityStatus extends ContextWrapper{ 

    public ConnectivityStatus(Context base) { 
     super(base); 
    } 

    public static boolean isConnected(Context context){ 

     ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo connection = manager.getActiveNetworkInfo(); 
     if (connection != null && connection.isConnectedOrConnecting()){ 
      return true; 
     } 
     return false; 
    } 
} 

당신의 활동에 코드를 적용 :

private BroadcastReceiver receiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
     if(!ConnectivityStatus.isConnected(getContext())){ 
      // no connection 
     }else { 
      // connected 
     } 
    } 
}; 

등록 방송을 활동의 onCreate() 방법 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    .. 
    ... 
    .... 
    } 

를/등록 잊지 활동주기에 등록하지 마십시오

@Override 
protected void onResume() { 
    super.onResume(); 
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    your_activity_context.unregisterReceiver(receiver); 

} 
+2

이것은 Wi-Fi 또는 모바일 네트워크가 활성화 된 경우에만 표시됩니다. 인터넷 연결이 작동 중인지 보여줍니다. – KJEjava48

+1

연결이 끊어졌는지 여부를 확인하는 것은 매우 효과적입니다. 하나는 연결을 확인하고 활동에 브로드 캐스트하여 연결을 알립니다. 이 코드는 Google Play 스토어 3 곳에서 잘 작동합니다. – W4R10CK

+0

@ KJEjava48 방법을 시도 했나요? – W4R10CK

0

호스트가 사용 가능한지 확인하려면 InetAddress.getByName(host).isReachable(timeOut)으로 시도 할 수 있습니다. 연결이 유효한지 확인하는 것과 동일해야합니다.

자세한 내용은 문서를 참조하십시오. InetAddress