android 判断WIFI是否连接

来源:互联网 发布:车解码器软件 编辑:程序博客网 时间:2024/05/17 13:12
需求:实时获取WIFI状态  给用户一个良好的体验
遇到的问题:首先想到的handler每隔多久请求一次  用到的时候发现了两个问题
                  1: 每隔一段时间弹出一次对话框这样用户体验会很不好
                  2: 如果每隔2小时请求一个数据,这样会造成现成的堵塞,及其不好。
实现思路:最后想到了无所不能的四大组件广播(Broadcast)  如果网络发生变化就发送一个广播通知

贴一下效果图
    
                 
我先贴出用Handler实现的代码:

  NetWorkStateReceiver netWorkStateReceiver;    private MyHandler handler = new MyHandler(this);    private class MyHandler extends android.os.Handler {        private WeakReference<Context> mWeakReference;        private String tag;        public MyHandler(Context context) {            mWeakReference = new WeakReference<Context>(context);        }        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 0) {                checkWifiState();                sendEmptyMessageDelayed(0, 1000 * 60 * 120);            }        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        handler.sendEmptyMessageDelayed(0, 1000 * 60 * 120);    }    /**     * 检查wifi是否处开连接状态     *     * @return     */    public boolean isWifiConnect() {        ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo mWifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);        return mWifiInfo.isConnected();    }    /**     * 检查wifi强弱     */    public void checkWifiState() {        if (isWifiConnect()) {            WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);            WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();            int wifi = mWifiInfo.getRssi();//获取wifi信号强度            if (wifi > -50 && wifi < 0) {//最强                Toast.makeText(this, "WIFI信号已达到最强王者", Toast.LENGTH_LONG).show();            } else if (wifi > -70 && wifi < -50) {//较强                Toast.makeText(this, "WIFI信号已达到永恒钻石", Toast.LENGTH_LONG).show();            } else if (wifi > -80 && wifi < -70) {//较弱                Toast.makeText(this, "WIFI信号已达不屈白银", Toast.LENGTH_LONG).show();            } else if (wifi > -100 && wifi < -80) {//微弱                Toast.makeText(this, "WIFI信号已达到倔强青铜", Toast.LENGTH_LONG).show();            }        } else {            //无连接            //  mImageView.setImageResource(R.drawable.wifi_null);            Toast.makeText(this, "WIFI已断开,客观请观看本地视频", Toast.LENGTH_LONG).show();        }    }

用广播实现的代码:
我是动态注册的广播,也可以静态注册。我就不解释中间的利弊了。

NetWorkStateReceiver:
public class NetWorkStateReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {                    WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);                        WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();            int wifi = mWifiInfo.getRssi();//获取wifi信号强度            if (wifi > -50 && wifi < 0) {//最强                Toast.makeText(context, "WIFI信号已达到最强王者", Toast.LENGTH_LONG).show();            } else if (wifi > -70 && wifi < -50) {//较强                Toast.makeText(context, "WIFI信号已达到永恒钻石", Toast.LENGTH_LONG).show();            } else if (wifi > -80 && wifi < -70) {//较弱                Toast.makeText(context, "WIFI信号已达不屈白银", Toast.LENGTH_LONG).show();            } else if (wifi > -100 && wifi < -80) {//微弱                Toast.makeText(context, "WIFI信号已达到倔强青铜", Toast.LENGTH_LONG).show();                        } else {                //无连接                //  mImageView.setImageResource(R.drawable.wifi_null);                Toast.makeText(context, "WIFI已断开,客观请观看本地视频", Toast.LENGTH_LONG).show();                            }        }    }
Main方法中调用

 NetWorkStateReceiver netWorkStateReceiver;    //在onResume()方法注册    @Override    protected void onResume() {        if (netWorkStateReceiver == null) {            netWorkStateReceiver = new NetWorkStateReceiver();        }        IntentFilter filter = new IntentFilter();        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        registerReceiver(netWorkStateReceiver, filter);        System.out.println("注册");        super.onResume();    }    //onPause()方法注销    @Override    protected void onPause() {        unregisterReceiver(netWorkStateReceiver);        System.out.println("注销");        super.onPause();    }