您的位置:首页 > 理论基础 > 计算机网络

android 监听网络变化 多处做出监听处理

2015-09-10 17:16 369 查看
有些时候,需要我们去监听手机网络的变化,从而做出相应的功能操作。如何实现?其实就是监听android系统本身发出的广播“android.net.conn.CONNECTIVITY_CHANGE”。这么一说大家就懂了。

好,当我们监听到该广播时,在程序中可能有多处地方需要做出相应的操作。下面直接上代码吧,大家互相学习学习!!

1、首先在Androidmainfest.xml清单文件中注册一个receiver,监听CONNECTIVITY_CHANGE

<receiver android:name="com.kinth.youdian.NetStateReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>


2、NetStateReceiver类

public class NetStateReceiver extends BroadcastReceiver {

    // 网络变化事件监听
    public static ArrayList<NetStateChangeListener> netList = new ArrayList<NetStateChangeListener>();

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
            if(netList.size() > 0) {// 有监听的时候,传递下去
                for (int i = 0; i < netList.size(); i++) {
                    netList.get(i).onNetStateChange();
                }
            }
            return;
        }
    }
}


3、NetStateChangeListener接口

/**
 * 网络变化的接口
 * @author Botision.Huang
 * 2015年9月10日上午10:48:59
 * TODO 在Androidmainfest.xml清单列表中注册了各一个receiver,
 * 并监听了网络的变化
 */
public abstract interface NetStateChangeListener {
    public abstract void onNetStateChange();
}


4、在Activity中,我们实现NetStateChangeListener 接口,如下

public class MainActivity extends Activity implements NetStateChangeListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onResume() {
        // TODO 自动生成的方法存根
        if (!NetStateReceiver.netList.contains(this)) {  
            NetStateReceiver.netList.add(this);  //将当前Activity加入到netList中
        }
        super.onResume();
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        if (NetStateReceiver.netList.contains(this)) {
            NetStateReceiver.netList.remove(this);// 取消监听推送的消息
        }
        super.onDestroy();
    }

    @Override
    public void onNetStateChange() {
        // TODO Auto-generated method stub
        if (isNetworkAvailable(this)) {
            Toast.makeText(this, "网络可用", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "当前网络不可用", Toast.LENGTH_SHORT).show();
        }
    }

    public static boolean isNetworkAvailable(Context context) {
        NetworkInfo info = getNetworkInfo(context);
        if (info != null) {
            return info.isAvailable();
        }
        return false;
    }

    private static NetworkInfo getNetworkInfo(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo();
    }

}


5、比如我们还有个SecondActivity,也需要监听网络的变化,那可以按照MainActivity一样,实现NetStateChangeListener接口,并将其add到NetStateReceiver.netList中,并实现其onNetStateChange()方法即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: