1. 程式人生 > >Android 全域性監聽判斷有無網路

Android 全域性監聽判斷有無網路

本人之前處理這個事情,網上很多的demo例子,都是在activity裡的,本人一直想在appliation中設定,結果很麻煩弄了很多類還是會有bug和crash,想在全域性設定判斷網路費了一會功夫,網上有大神說可以利用廣播實施監聽

下面分享自己的例子給大家,沒有那麼麻煩,很簡單

首先在Mainactivity

public class MainActivity extends Activity  {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        setBreoadcast();
      
    }

    /**
     * 設定網路監聽
     */
    private void setBreoadcast() {
        BroadcastReceiver receiver=new NetBroadCastReciver();
        IntentFilter filter=new IntentFilter();
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(receiver, filter);
    }



然後在一個廣播的類裡
public class NetBroadCastReciver extends BroadcastReceiver {

    /**
     * 只有當網路改變的時候才會 經過廣播。
     */
    private MyDialog dialog;
    private View view;

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

        //此處是主要程式碼,
        //如果是在開啟wifi連線和有網路狀態下
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (NetworkInfo.State.CONNECTED == info.getState()) {
                //連線狀態 處理自己的業務邏輯
                EventBus.getDefault().post(new BroadCastEvent(SharePrefrence.BooleanBroadCast));
            } else {
                Toast.makeText(context, "網路連結失敗", Toast.LENGTH_SHORT).show();
                context.startActivity(new Intent(context, BooleanNetWork.class));
            }
        }


    }

}