android 判断WIFI是否连接
2017-12-05 11:39
435 查看
需求:实时获取WIFI状态 给用户一个良好的体验
遇到的问题:首先想到的handler每隔多久请求一次 用到的时候发现了两个问题
1: 每隔一段时间弹出一次对话框这样用户体验会很不好
2: 如果每隔2小时请求一个数据,这样会造成现成的堵塞,及其不好。
实现思路:最后想到了无所不能的四大组件广播(Broadcast) 如果网络发生变化就发送一个广播通知
贴一下效果图
我先贴出用Handler实现的代码:
用广播实现的代码:
我是动态注册的广播,也可以静态注册。我就不解释中间的利弊了。
NetWorkStateReceiver:
Main方法中调用
遇到的问题:首先想到的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(); }
相关文章推荐
- Android编程判断是否连接网络的方法【WiFi及3G判断】
- Android判断网络连接是否可用,WiFi、移动数据是否打开等
- Android开发之判断网络(wifi、3G)是否连接
- Android 判断是否连接成功了指定wifi
- android 判断wifi是否已经连接
- [Android实例] 判断网络是否连接,然后选择网络类型(比如wifi等)来连接网络
- android判断是否连接wifi和网络状态的判断
- android 关闭wifi时判断GPRS是否连接
- Android--判断是否连接成功了指定wifi
- Android判断wifi或者gprs是否连接
- android中判断网络连接是否可用 2g、3g、wifi
- android判断连接的wifi是否能访问网络
- android判断网络或wifi是否连接
- Android判断网络连接是否可用(代码)
- android判断网络是否连接
- Android之判断手机连接的网络类型是WIFI还是2G/3G/4G
- android 开发中判断网络是否连接的代码
- 判断网络是否连接或是否连接wifi
- android检测网络是否连接,WIFI是否连接
- Android的网络Http判断是否连接服务器