2017-01-02 1 views
-1

인터넷 연결이 다시 활성화되면 사용자에게 알리는 Android 앱을 제작 중입니다. 그/그녀는 인터넷이 작동하지 않을 때이 기능을 활성화해야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 현재 서비스에서 Google에 무한 루프 핑 요청을 실행하고 있지만 수천 건의 요청 후에도 계속되지 않습니다. 이것을 달성하기위한 더 단순하거나 좋은 방법이 있습니까? 고맙습니다.인터넷이 계속 활성화되어 있는지 (인터넷이 비활성 상태 일 때) 안드로이드에서 가장 좋은 방법은 무엇입니까?

편집 : 대부분의 답변과 참조는 내 기기가 Wi-Fi에 연결된 경우에만 확인합니다. 하지만 내 장치가 내 라우터에 연결되어 있지만 인터넷 연결이 작동하지 않으면 어떻게해야합니까?

+1

읽기 https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges –

+0

나는이 질문에 6 개 이상의 답을 얻을 것이라고 확신한다 : 잠김 전에 D –

+1

잃어 버렸다. 우리는 무엇을 베팅 했습니까? :) –

답변

2

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

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); 

} 
0

은 google.com에 대한 간단한 ping 요청을 만들고 핑을 유지하기 위해 활동에 발리 또는 다른 네트워크 라이브러리를 사용하여 백그라운드 스레드를 실행합니다. 이에 대한 응답으로 네트워크 응답 코드를 확인하십시오. 서버 오류 코드 (5xx 시리즈)이면 인터넷을 사용할 수 없습니다. OK 코드 (2xx 시리즈)를 받으면 인터넷에 연결되어 있습니다. 두 경우 모두 500ms의 재시도 지연을 유지하고 네트워크 가용성 응답을 수집하십시오.

또는 Android 네트워크 관리자를 사용하십시오. 백그라운드 스레드에서 500ms마다에

public class NetworkConnectivity { 
    Context context; 

    private Context _context; 

    public NetworkConnectivity(Context context){ 
     this._context = context; 
    } 

    public boolean isNetworkConnected(){ 
     ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 

     } 
     return false; 
    } 
} 

전화 isNetworkConnected()을하고 그 지식에 대해 수행 할 작업에 따라 (연결에 대한 사실과 연결되지는 false) 응답을 사용 :이 클래스는 다음과 같이 구현 될 수 연결 상태.

관련 문제