场景:android判断是否连接wifi跟网络状态的判断

android判断是否连接wifi和网络状态的判断

// 是否连接WIFI

public static boolean isWifiConnected(Context context) {

ConnectivityManager connectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo wifiNetworkInfo = connectivityManager

.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (wifiNetworkInfo.isConnected()) {

return true;

}

return false;

}

/**

* 对网络连接状态进行判断

*

* @return true, 可用; false, 不可用

*/

public static boolean isOpenNetwork(Context ctx) {

ConnectivityManager connManager = (ConnectivityManager) ctx

.getSystemService(Context.CONNECTIVITY_SERVICE);

if (connManager.getActiveNetworkInfo() != null) {

return connManager.getActiveNetworkInfo().isAvailable();

}

return false;

}

1.得到当前已连接的wifi信息

WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifi_service.getConnectionInfo();

其中wifiInfo有以下的方法:

wifiinfo.getBSSID();
wifiinfo.getSSID();
wifiinfo.getIpAddress();获取IP地址。
wifiinfo.getMacAddress();获取MAC地址。
wifiinfo.getNetworkId();获取网络ID。
wifiinfo.getLinkSpeed();获取连接速度,可以让用户获知这一信息。

wifiinfo.getRssi();获取RSSI,RSSI就是接受信号强度指示。在这可以直接和华为提供的Wi-Fi信号阈值进行比较来提供给用户,让用户对网络或地理位置做出调整来获得最好的连接效果。
这里得到信号强度就靠wifiinfo.getRssi();这个方法。
 
2.得到的值是一个0到-100的区间值,是一个int型数据,其中0到-50表示信号最好,-50到-70表示信号偏差,小于-70表示最差,有可能连接不上或者掉线。
这里我做的是根据信号强度来更换图片。设置配置文件wifi_sel.xml如下:

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="50" android:drawable="@drawable/library_template_05" />
<item android:maxLevel="70" android:drawable="@drawable/library_template_05_2" />
<item android:maxLevel="100" android:drawable="@drawable/library_template_05_3" />
</level-list>

注意这里都是绝对值,因为在imageView.setImageLevel(level)时,level必须是绝对值,否则程序会报告空指针。

3.注册侦听,和android 电池侦听显示类似

// wifi相关
IntentFilter wifiIntentFilter; // wifi监听器

在oncreate方法中加入:

// wifi
wifiIntentFilter = new IntentFilter();
wifiIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

4.然后再:

// 声明wifi消息处理过程
private BroadcastReceiver wifiIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int wifi_state = intent.getIntExtra("wifi_state", 0);
int level = Math.abs(((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo().getRssi());
Log.i(Global.TAG, "1111:" + level);
switch (wifi_state) {
case WifiManager.WIFI_STATE_DISABLING:
Log.i(Global.TAG, "1111:" + WifiManager.WIFI_STATE_DISABLING);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_DISABLED:
Log.i(Global.TAG, "2222:" + WifiManager.WIFI_STATE_DISABLED);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_ENABLING:
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
Log.i(Global.TAG, "33333:" + WifiManager.WIFI_STATE_ENABLING);
break;
case WifiManager.WIFI_STATE_ENABLED:
Log.i(Global.TAG, "4444:" + WifiManager.WIFI_STATE_ENABLED);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_UNKNOWN:
Log.i(Global.TAG, "5555:" + WifiManager.WIFI_STATE_UNKNOWN);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
}
}
};

5.在onResume方法中注册,在onPause方法中销毁:

@Override
protected void onResume() {
super.onResume();
// 注册wifi消息处理器
registerReceiver(wifiIntentReceiver, wifiIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(wifiIntentReceiver);
}

6.最后加入权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
 

android判断是否连接wifi跟网络状态的判断及wifi信号强度的方法的更多相关文章

  1. android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理

    代码如下:package com.android.xym; import java.io.IOException; import java.net.HttpURLConnection; import ...

  2. Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名

    安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息. 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了. 本 ...

  3. iOS开发-关于网络状态的判断

    在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...

  4. iOS 检测网络状态 自动判断 认为提示网络改变

    检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验WIFI\3G ...

  5. android推断是否连接wifi和网络状态的推断

    <span style="font-size:18px;">// 是否连接WIFI public static boolean isWifiConnected(Cont ...

  6. Android检测网络状态,判断当前网络是否可用

    用户手机当前网络可用:WIFI.2G/3G网络,用户打开与不打开网络,和是否可以用是两码事.可以使用指的是:用户打开网络了并且可以连上互联网进行上网. 检测当前网络是否可用,代码如下: /** * 检 ...

  7. Android项目实战(五十三):判断网络连接是否为有线状态(tv项目适配)

    一般对于android手机,我们可以通过sdk提供的方法判断网络情况 /** * 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2 * 自定义 * * @p ...

  8. Android 通过广播获取网络状态

    Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验.          本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...

  9. Android实时监听网络状态(1)

    其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听. 1.添加访问网络和获 ...

  10. Android实时监听网络状态

    Android实时监听网络状态(1)   其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...

随机推荐

  1. gitlabApi如何获取项目文件夹的commitId

      在我们做配置管理系统和gitlab系统集成的时候,有一个常见的场景,就是要获取某个文件的commitId,来记录本次配置文件提交的版本.这个通过gitlabApi很容易实现: GET /proje ...

  2. 10分钟了解MVVM,实现简易MVVM

    MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel.Model 层代表数据模型,View 代表 UI 组件,View ...

  3. PID控制_位置式

    位置式: 1. 位置式: pid.c: float PID_calculate( float dT_s, //周期(单位:秒) float in_ff, //前馈值 float expect, //期 ...

  4. VMwarestation安装centos系统

    上机实验1 1.软硬件准备 软件:推荐使用vmware 镜像:centos7下载网址https://mirror.iscas.ac.cn/centos/7/isos/x86_64/ 这个镜像网址实测比 ...

  5. jquery(二:jquery的DOM操作)

    jquery的Dom操作 查找元素(选择器已实现):创建节点对象:访问和设置节点对象的值,以及属性:添加节点:删除节点:删除.添加.修改.设置节点的css样式等. 操作元素的属性: 方法 说明 举例 ...

  6. 00-DLL劫持&C语言远程加载shellcode

    0x01 杀软拦截检测规则引导-DLL劫持上线 准备工具 cs vs2019 dll劫持工具:https://bbs.pediy.com/thread-224408.htm 极速PDF:https:/ ...

  7. BUUCTF-[强网杯2019]随便注

    强网杯2019随便注 它说随便注,它可不是随便注入的哈 首先测试闭合环境,因为有回显,所以很快即知道了是一个单引号闭合 接下来常规操作,得到列数大概为2 1';select 2; 返回了过滤信息 于是 ...

  8. nvm作用、下载、使用、常见问题

    一.nvm是什么及作用 nvm全名node.js version management,同等于nodejs的版本管理工具.当不同项目使用不同版本nodejs且不统一时,这时就用到nvm进行不同项目不同 ...

  9. postgresql中条件表达式 coalesce、nullif 、greatest、least

    一.postgresql中条件表达式 1.1 GREATEST和LEASTGREATEST(value [, ...]) LEAST(value [, ...])# 注意比较值得类型一定要相同案例:比 ...

  10. dotnet core+nginx+supervisor

    1.前提准备 安装虚拟机,安装CentOS,有云服务器的直接用云服务器就行 本地安装 xshell.xftp 2.nginx配置静态页面 我们先学习一下使用nginx配置一个静态页面,一步一步来深入 ...