2014-09-05 21 views
23

Tôi đã có mã này mà nghe thay đổi kết nối -Android: Internet thay đổi kết nối người nghe

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

Và tôi kiểm tra kết nối Internet sử dụng mã này - Internet Check

Nhưng vấn đề là nếu mạng đột nhiên bị mất kết nối internet mà không có bất kỳ sự thay đổi kết nối nào, mã này là vô ích. Có cách nào để tạo Máy thu phát sóng người nghe để thay đổi kết nối Internet không? Tôi có một ứng dụng web và các thay đổi kết nối Internet đột ngột có thể gây ra sự cố.

+0

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

Trả lời

45

Hãy thử điều này

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

Và đối với BroadcastReceiver

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

     } 
    } 
} 

Đừng quên đặt này vào AndroidManifest.xml của bạn

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

Hy vọng điều này sẽ giúp bạn Cheers!

+0

@AntiMatter này có khắc phục được sự cố của bạn không? – Cjames

+7

tại sao bạn cần kiểm tra xem (! "Android.intent.action.BOOT_COMPLETED" .equals (intent.getAction())) ???? –

+0

@shriduttkothari Tôi sử dụng nó để tải xuống chức năng – Cjames

Các vấn đề liên quan