2014-09-05 3 views
23

인터넷 연결을 변경 리스너는 -안드로이드 : 이미 연결 변화에 수신이 코드가

public class NetworkStateReceiver extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) 
    { 
    Log.d("app","Network connectivity change"); 

    if(intent.getExtras() != null) 
    { 
     NetworkInfo ni = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) 
     { 
     Log.i("app", "Network " + ni.getTypeName() + " connected"); 
     } 
    } 

    if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) 
    { 
     Log.d("app", "There's no network connectivity"); 
    } 
    } 
} 

그리고 나는이 코드를 사용하여 인터넷 연결을 확인 - Internet Check

을하지만 문제는 네트워크가 갑자기 잃으면 그 연결 변경없이 인터넷 연결,이 코드는 쓸모가있다. 브로드 캐스트 수신기 인터넷 연결 변경을위한 수신기를 만들 수있는 방법이 있습니까? 웹 응용 프로그램이있어서 갑자기 인터넷 연결이 변경되면 문제가 발생할 수 있습니다.

+0

https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app – lenhuy2106

답변

45

는 시도이

public class NetworkUtil { 
    public static int TYPE_WIFI = 1; 
    public static int TYPE_MOBILE = 2; 
    public static int TYPE_NOT_CONNECTED = 0; 
    public static final int NETWORK_STATUS_NOT_CONNECTED=0,NETWORK_STAUS_WIFI=1,NETWORK_STATUS_MOBILE=2; 

    public static int getConnectivityStatus(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     if (null != activeNetwork) { 
      if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
       return TYPE_WIFI; 

      if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
       return TYPE_MOBILE; 
     } 
     return TYPE_NOT_CONNECTED; 
    } 

    public static int getConnectivityStatusString(Context context) { 
     int conn = NetworkUtil.getConnectivityStatus(context); 
     int status = 0; 
     if (conn == NetworkUtil.TYPE_WIFI) { 
      status = NETWORK_STAUS_WIFI; 
     } else if (conn == NetworkUtil.TYPE_MOBILE) { 
      status =NETWORK_STATUS_MOBILE; 
     } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { 
      status = NETWORK_STATUS_NOT_CONNECTED; 
     } 
     return status; 
    } 
} 

그리고 브로드 캐스트 리시버

public class NetworkChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     int status = NetworkUtil.getConnectivityStatusString(context); 
     Log.e("Sulod sa network reciever", "Sulod sa network reciever"); 
     if (!"android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) { 
      if(status==NetworkUtil.NETWORK_STATUS_NOT_CONNECTED){ 
       new ForceExitPause(context).execute(); 
      }else{ 
       new ResumeForceExitPause(context).execute(); 
      } 

     } 
    } 
} 

이 희망

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<receiver 
     android:name="NetworkChangeReceiver" 
     android:label="NetworkChangeReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     </intent-filter> 
    </receiver> 

당신의 AndroidManifest.xml

이 점을 넣어하는 것을 잊지 마십시오이 당신에게 환호를 도움이 될 것입니다에 대한

!

+0

@AntiMatter가 문제를 해결 했습니까? – Cjames

+7

왜 if (! "android.intent.action.BOOT_COMPLETED".equals (intent.getAction()))를 확인해야합니까? –

+0

@shriduttkothari 기능을 다운로드하는 데이 코드를 사용합니다. – Cjames