关于wifi连接与断开的监测

来源:互联网 发布:中国对美国出口数据 编辑:程序博客网 时间:2024/05/01 11:00

网上关于wifi打开或者关闭的监听例子还是比较多的,但是关于wifi连接到某一个point或者从某一个point断开的监听却比较少。经过研究,终于找到了对应得API。分享给大家。

下边直接上代码:
说明:这里是直接在Application里边注册的广播。代码注释已近很详细了,大家自己看。
isNetWorkConnected这个变量代表当前wifi是连接还是断开。

package com.benxun;import android.app.Application;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.wifi.WifiManager;import android.util.Log;import android.widget.Toast;public class AppApplication extends Application {    private boolean isNetWorkConnected = false;    public boolean isNetWorkConnected() {        return isNetWorkConnected;    }    IntentFilter wifiFilter;    BroadcastReceiver receiver;    @Override    public void onCreate() {        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();        if (networkInfo != null) {            isNetWorkConnected = networkInfo.isConnected();        }        wifiFilter = new IntentFilter();        // 监听wifi enabled, disabled, enabling, disabling, or unknown状态        wifiFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);        wifiFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);        // wifiFilter.addAction(WifiManager.EXTRA_SUPPLICANT_CONNECTED);        receiver = new MyReciver();        registerReceiver(receiver, wifiFilter);        super.onCreate();    }    /**     * 当终止利用程序对象时调用,不保证1定被调用,当程序是被内核终止以便为其他利用程序释放资源,那     * 么将不会提示,并且不调用利用程序的对象的onTerminate方法而直接终止进 程     */    @Override    public void onTerminate() {        unregisterReceiver(receiver);        receiver = null;        super.onTerminate();    }    /**     * WIFI广播接收者     *      * @author Administrator     */    class MyReciver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            /**             * wifi打开或者关闭的广播。当应用第一次打开的时候会接收到该广播             */            // if (intent.getAction()            // .equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {            // int stat = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);            //            // switch (stat) {            //            // case WifiManager.WIFI_STATE_ENABLED:            // Log.e("", "已近打开");            //            // GetNetWorkInfo();            //            // break;            //            // case WifiManager.WIFI_STATE_DISABLED:            // Log.e("", "已近关闭");            // break;            // }            // }            /**             * 当网络断开或者链接的时候回接收到该广播             */            if (intent.getAction().equals(                    WifiManager.NETWORK_STATE_CHANGED_ACTION)) {                /**                 * indicating that the state of Wi-Fi connectivity has changed.                 * One extra provides the new state in the form of a NetworkInfo                 * object. If the new state is CONNECTED, additional extras may                 * provide the BSSID and WifiInfo of the access point. as a                 * String.                 */                // 如果新的状态是Connected,那么返回的信息回包含额外的一些信息,比如Bssid,Wifiinfo                NetworkInfo info = intent                        .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);                Log.e("info.isConnected()", info.isConnected() + "");                if (info.isConnected()) {                    if (info.getType() == ConnectivityManager.TYPE_MOBILE) {                        Toast.makeText(AppApplication.this, "您正在使用移动网络", 0)                                .show();                    } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {                        isNetWorkConnected = true;                        /**                         * requestRouteToHost 判断一个网络是否可以连接到一个指定的网络                         * isActiveNetworkMetered 判断网络是否计费 isNetworkTypeValid                         * 网络是否有效                         */                    }                } else {                    isNetWorkConnected = false;                }            }        }    }}
0 0