先簡單說一下思路:網絡變化時系統會發出廣播。所以我們監聽這個廣播,利用接口回調通知activity做相應的操作就好了。
思路
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
直接上代碼
NetUtil
import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo;  /**  * Author: lenovo  * Date: 2018/2/26  * email: 1271396448@qq.com  */  public class NetUtil {    /**   * 沒有連接網絡   */  public static final int NETWORK_NONE = -1;  /**   * 移動網絡   */  public static final int NETWORK_MOBILE = 0;  /**   * 無線網絡   */  public static final int NETWORK_WIFI = 1;   public static int getNetWorkState(Context context) {    // 得到連接管理器對象   ConnectivityManager connectivityManager = (ConnectivityManager) context     .getSystemService(Context.CONNECTIVITY_SERVICE);    NetworkInfo activeNetworkInfo = connectivityManager     .getActiveNetworkInfo();   if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {    if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {     return NETWORK_WIFI;    } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {     return NETWORK_MOBILE;    }   } else {    return NETWORK_NONE;   }   return NETWORK_NONE;  }  } NetBroadReceiver
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager;  /**  * Author: lenovo  * Date: 2018/2/26  * email: 1271396448@qq.com  */  public class NetBroadcastReceiver extends BroadcastReceiver {  public NetEvevt evevt = BaseActivity.evevt;   @Override  public void onReceive(Context context, Intent intent) {   // TODO Auto-generated method stub   // 如果相等的話就說明網絡狀態發生了變化   if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {    int netWorkState = NetUtil.getNetWorkState(context);    // 接口回調傳過去狀態的類型    evevt.onNetChange(netWorkState);   }  }   // 自定義接口  public interface NetEvevt {   public void onNetChange(int netMobile);  } } BaseActivity
import android.os.Bundle; import android.support.v4.app.FragmentActivity;  /**  * Author: lenovo  * Date: 2018/2/26  * email: 1271396448@qq.com  */  abstract public class BaseActivity extends FragmentActivity implements NetBroadcastReceiver.NetEvevt {   public static NetBroadcastReceiver.NetEvevt evevt;  /**   * 網絡類型   */  private int netMobile;   @Override  protected void onCreate(Bundle arg0) {   // TODO Auto-generated method stub   super.onCreate(arg0);   evevt = this;   inspectNet();  }    /**   * 初始化時判斷有沒有網絡   */   public boolean inspectNet() {   this.netMobile = NetUtil.getNetWorkState(BaseActivity.this);   return isNetConnect();    // if (netMobile == 1) {   // System.out.println("inspectNet:連接wifi");   // } else if (netMobile == 0) {   // System.out.println("inspectNet:連接移動數據");   // } else if (netMobile == -1) {   // System.out.println("inspectNet:當前沒有網絡");   //   // }  }   /**   * 網絡變化之后的類型   */  @Override  public void onNetChange(int netMobile) {   // TODO Auto-generated method stub   this.netMobile = netMobile;   isNetConnect();   }   /**   * 判斷有無網絡 。   *   * @return true 有網, false 沒有網絡.   */  public boolean isNetConnect() {   if (netMobile == 1) {    return true;   } else if (netMobile == 0) {    return true;   } else if (netMobile == -1) {    return false;    }   return false;  }  } MainActivity
import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.TextView;  public class MainActivity extends BaseActivity {   private TextView textView,txtView;  ListView listView; //聲明一個ListView對象   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   textView= (TextView) findViewById(R.id.textView);   txtView=(TextView)this.findViewById(R.id.txtView);     //啟動時判斷網絡狀態   boolean netConnect = this.isNetConnect();   if (netConnect){    textView.setVisibility(View.GONE);    txtView.setText("網絡連接正常");   }else {    textView.setVisibility(View.VISIBLE);    txtView.setText("網絡連接異常");   }  }   @Override  public void onNetChange(int netMobile) {   super.onNetChange(netMobile);   //網絡狀態變化時的操作   if (netMobile==NetUtil.NETWORK_NONE){    textView.setVisibility(View.VISIBLE);    txtView.setText("網絡連接異常");   }else {    textView.setVisibility(View.GONE);    txtView.setText("網絡連接正常");   }  }  } 記得在清單文件中注冊
<receiver android:name="cn.broadcastreceiver.NetBroadcastReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答