您的位置:首页 > 移动开发 > Android开发

android 判断WIFI是否连接

2017-12-05 11:39 435 查看
需求:实时获取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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息