zoukankan      html  css  js  c++  java
  • Android实时监听网络状态(1)

    其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听。

    1、添加访问网络和获取网络状态的权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />

    2、新建一个Application类并继承android.app.Application 申明变量保存网络状态

    package com.javen.application;
    
    import com.javen.netbroadcast.NetUtil;
    
    
    public class Application extends android.app.Application {
        private static Application mApplication;
        public static int mNetWorkState;
    
        public static synchronized Application getInstance() {
            return mApplication;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            mApplication = this;
            initData();
        }
    
    
    
        public void initData() {
            mNetWorkState = NetUtil.getNetworkState(this);
        }
    }
    Application

    3、新建NetBroadcastReceiver类继承BroadcastReceiver 并实现onReceive方法 在onReceive方法通知接口完成加载

    package com.javen.receiver;
    
    import java.util.ArrayList;
    
    import com.javen.application.Application;
    import com.javen.netbroadcast.NetUtil;
    
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class NetBroadcastReceiver extends BroadcastReceiver {
        public static ArrayList<netEventHandler> mListeners = new ArrayList<netEventHandler>();
        private static String NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(NET_CHANGE_ACTION)) {
                Application.mNetWorkState = NetUtil.getNetworkState(context);
                if (mListeners.size() > 0)// 通知接口完成加载
                    for (netEventHandler handler : mListeners) {
                        handler.onNetChange();
                    }
            }
        }
    
        public static abstract interface netEventHandler {
    
            public abstract void onNetChange();
        }
    }
    View Code

    4、在应该的Activity中实现netEventHandler接口 

    package com.javen.netbroadcast;
    
    import com.javen.receiver.NetBroadcastReceiver;
    import com.javen.receiver.NetBroadcastReceiver.netEventHandler;
    import com.javen.ui.base.BaseActivity;
    
    import android.os.Bundle;
    import android.view.Menu;
    
    public class MainActivity extends BaseActivity implements netEventHandler{
        
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            NetBroadcastReceiver.mListeners.add(this);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public void onNetChange() {
            // TODO Auto-generated method stub
            if (NetUtil.getNetworkState(this) == NetUtil.NETWORN_NONE) {
                T.showLong(this, R.string.net_err);
            }else {
                T.showLong(this, "网络可以使用");
            }
        }
    
    }

    5、判断网络的工具类

    package com.javen.netbroadcast;
    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo.State;
    
    public class NetUtil {
        public static final int NETWORN_NONE = 0;
        public static final int NETWORN_WIFI = 1;
        public static final int NETWORN_MOBILE = 2;
    
        public static int getNetworkState(Context context) {
            ConnectivityManager connManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
    
            // Wifi
            State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                    .getState();
            if (state == State.CONNECTED || state == State.CONNECTING) {
                return NETWORN_WIFI;
            }
    
            // 3G
            state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                    .getState();
            if (state == State.CONNECTED || state == State.CONNECTING) {
                return NETWORN_MOBILE;
            }
            return NETWORN_NONE;
        }
    }
    NetUtil
  • 相关阅读:
    AngularJS入门教程
    mobile web retina 下 1px 边框解决方案
    Python字典猜解
    20145313exp9
    20145313张雪纯Exp8 Web基础
    20145313张雪纯exp7
    20145313张雪纯信息搜集与漏洞扫描
    计算机病毒静态分析2
    计算机病毒静态分析1
    20145313张雪纯MSF基础应用实验
  • 原文地址:https://www.cnblogs.com/zyw-205520/p/3770705.html
Copyright © 2011-2022 走看看