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(); }
阅读全文
1 0
- android 判断WIFI是否连接
- android 判断wifi是否已经连接
- Android判断wifi或者gprs是否连接
- android判断网络或wifi是否连接
- 判断Wifi是否连接
- android判断是否连接wifi和网络状态的判断
- iOS 判断是否连接wifi
- 判断网络流量WIFI是否连接
- android 关闭wifi时判断GPRS是否连接
- Android开发之判断网络(wifi、3G)是否连接
- Android判断设备是否打开WIFI、GPRS数据连接
- Android判断设备是否打开WIFI、GPRS数据连接
- Unity判断网络是否连接 以及 判断是否连接WiFi
- Unity判断网络是否连接 以及 判断是否连接WiFi
- Android 判断是否联wifi
- Android 判断wifi是否链接
- Android判断是否为Wifi
- 检测Android是否连接WIFI
- HADOOP部署之后无法WEB访问
- Java进阶之JSP生成条形码知识点总结
- Kylin系列-Apache Kylin原理学习之Cube的创建与Build
- 客户端更新系统
- jquery checkbox全选删除
- android 判断WIFI是否连接
- 条件随机场(Conditional Random Field)简介
- http请求的session管理
- c语言定义变量与声明的区别
- python进阶之HTML报头参数详解(爬虫)
- “黑科技”来袭!人脸识别技术广受关注
- 7、新手入手树莓派教程--树莓派屏幕的安装
- MFC自制进度条
- 测试过程中所关注的HTTP协议详解