android 获取wifi的加密类型,Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等...
下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等。
下面是效果图:
GitHub 下载地址:https://github.com/wuqingsen/WifiDemoWu
csdn 下载地址 :https://download.csdn.net/download/wuqingsen1/11687828
下面来看一下具体的方法使用:
使用前先加入权限:
获取 WifiManager :
WifiManager mWifiManager = (WifiManager)mContext.getApplicationContext().getSystemService(mContext.WIFI_SERVICE);
获取 WiFi 列表 :
/**
* 获取wifi列表
*/
public static ListgetWifiList(WifiManager mWifiManager) {
return mWifiManager.getScanResults();
}
开始扫描 WiFi :
/**
* 开始扫描wifi
*/
public static void startScanWifi(WifiManager manager) {
if (manager != null) {
manager.startScan();
}
}
保存网络 :
/**
* 保存网络
*/
public static void saveNetworkByConfig(WifiManager manager, WifiConfiguration config) {
if (manager == null) {
return;
}
try {
Method save = manager.getClass().getDeclaredMethod("save", WifiConfiguration.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));
if (save != null) {
save.setAccessible(true);
save.invoke(manager, config, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
忘记网络:
/**
* 忘记网络
*/
public static void forgetNetwork(WifiManager manager, int networkId) {
if (manager == null) {
return;
}
try {
Method forget = manager.getClass().getDeclaredMethod("forget", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));
if (forget != null) {
forget.setAccessible(true);
forget.invoke(manager, networkId, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
断开连接:
/**
* 断开连接
*/
public static boolean disconnectNetwork(WifiManager manager) {
return manager != null && manager.disconnect();
}
获取当前 WiFi 名字 :
/**
* 获取当前wifi名字
* @return
*/
public static String getWiFiName(WifiManager manager) {
WifiInfo wifiInfo = manager.getConnectionInfo();
return wifiInfo.getSSID();
}
获取 WiFi 加密方式:
/**
* 获取wifi加密方式
*/
public static String getEncrypt(WifiManager mWifiManager, ScanResult scanResult) {
if (mWifiManager != null) {
String capabilities = scanResult.capabilities;
if (!TextUtils.isEmpty(capabilities)) {
if (capabilities.contains("WPA") || capabilities.contains("wpa")) {
return "WPA";
} else if (capabilities.contains("WEP") || capabilities.contains("wep")) {
return "WEP";
} else {
return "没密码";
}
}
}
return "获取失败";
}
检查是否开启 WiFi 并打开 WiFi :
/**
* 是否开启wifi,没有的话打开wifi
*/
public static boolean openWifi(WifiManager mWifiManager) {
boolean bRet = true;
if (!mWifiManager.isWifiEnabled()) {
bRet = mWifiManager.setWifiEnabled(true);
}
return bRet;
}
连接指定 WiFi:
/**
* 连接WiFi
* @param wifiManager
* @param wifiName
* @param password
* @param type
*/
@SuppressLint("WifiManagerLeak")
public static void connectWifi(WifiManager wifiManager, String wifiName, String password, String type) {
// 1、注意热点和密码均包含引号,此处需要需要转义引号
String ssid = "\"" + wifiName + "\"";
String psd = "\"" + password + "\"";
//2、配置wifi信息
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = ssid;
switch (type) {
case "WEP":
// 加密类型为WEP
conf.wepKeys[0] = psd;
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
break;
case "WPA":
// 加密类型为WPA
conf.preSharedKey = psd;
break;
default:
//无密码
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
//3、链接wifi
wifiManager.addNetwork(conf);
Listlist = wifiManager.getConfiguredNetworks();
for (WifiConfiguration i : list) {
if (i.SSID != null && i.SSID.equals(ssid)) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
break;
}
}
}
WiFi 状态监听:
private WifiBroadcastReceiver wifiReceiver;
//监听wifi变化
private void registerReceiverWifi() {
wifiReceiver = new WifiBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);//监听wifi是开关变化的状态
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//监听wifi连接状态
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//监听wifi列表变化(开启一个热点或者关闭一个热点)
registerReceiver(wifiReceiver, filter);
}
//监听wifi状态广播接收器
public class WifiBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
//wifi开关变化
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (state) {
case WifiManager.WIFI_STATE_DISABLED: {
//wifi关闭
Log.e("=====", "已经关闭");
tv_wifiState.append("\n 打开变化:wifi已经关闭");
break;
}
case WifiManager.WIFI_STATE_DISABLING: {
//wifi正在关闭
Log.e("=====", "正在关闭");
tv_wifiState.append("\n 打开变化:wifi正在关闭");
break;
}
case WifiManager.WIFI_STATE_ENABLED: {
//wifi已经打开
Log.e("=====", "已经打开");
tv_wifiState.append("\n 打开变化:wifi已经打开");
break;
}
case WifiManager.WIFI_STATE_ENABLING: {
//wifi正在打开
Log.e("=====", "正在打开");
tv_wifiState.append("\n 打开变化:wifi正在打开");
break;
}
case WifiManager.WIFI_STATE_UNKNOWN: {
//未知
Log.e("=====", "未知状态");
tv_wifiState.append("\n 打开变化:wifi未知状态");
break;
}
}
} else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
//监听wifi连接状态
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.e("=====", "--NetworkInfo--" + info.toString());
if (NetworkInfo.State.DISCONNECTED == info.getState()) {//wifi没连接上
Log.e("=====", "wifi没连接上");
tv_wifiState.append("\n 连接状态:wifi没连接上");
} else if (NetworkInfo.State.CONNECTED == info.getState()) {//wifi连接上了
Log.e("=====", "wifi以连接");
tv_wifiState.append("\n 连接状态:wifi以连接,wifi名称:" + MyWifiManager.getWiFiName(mWifiManager));
} else if (NetworkInfo.State.CONNECTING == info.getState()) {//正在连接
Log.e("=====", "wifi正在连接");
tv_wifiState.append("\n 连接状态:wifi正在连接");
}
} else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {
//监听wifi列表变化
Log.e("=====", "wifi列表发生变化");
}
}
}
开启 WiFi ,关闭 WiFi 方法:
/**
* 开启wifi
*/
public void openWifi(WifiManager mWifiManager) {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
/**
* 关闭wifi
*/
public void closeWifi(WifiManager mWifiManager) {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
可以在最上面下载 demo 看具体使用方法。
android 获取wifi的加密类型,Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等...相关推荐
- Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...
- Android 监听wifi总结
功能实现:控制wifi开关,连上某个特定的wifi. 首先先上个wifi工具类,此类转载网上一人,出处不明了. package rodar.rgs.conference.utils;import ja ...
- Android 监听 WiFi 开关状态
Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...
- android 信号强度变化,Android监听WIFI网络的变化并且获得当前信号强度
MainActivity如下: package cc.testwifi; import android.os.Bundle; import android.app.Activity; /** * De ...
- 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓网络连接情况全解:包括网络连接状态的监听.网络数据使用状态的监听.获取当前网络连接情况.启动wifi.获取当前连接wifi的网络情况.扫描wifi ...
- Android 监听 Android中监听系统网络连接打开或者关闭的实现代码
本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...
- java wifi监听_Android 监听 WiFi 开关状态
Android 监听 WiFi 开关状态 WifiSwitch_Presenter 源码: package com.yiba.wifi.sdk.lib.presenter; import androi ...
- android 监听手机电量变化
今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...
- 安卓广播监听WiFi信号强弱的变化
安卓开发过程中,有可能会遇到监听WiFi信号强弱的需求,比如:一些应用隐藏掉手机自带的状态栏,就需要自己实现监听WiFi信号的强弱,还有电池电量,还有时间的变化:废话不多说,下面看图,自己实现的状态栏 ...
最新文章
- Skype for Business Server 2015-升级-实战公开课(免费视频)
- 报名开启 | 李开复等AI大咖齐聚量子位MEET大会,邀你共探新形势下智能产业发展之路...
- mysql 查询表总行数字段_mysql中怎么查询表中的字段个数
- qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
- 皮肤可配置化:变量、样式分离
- study notes for python
- 现代程序设计 作业 第1次
- 操作系统信号量和管程
- 2叉树排序缺失元素查找
- 敏捷开发团队管理系列之五:大型研发团队的切分(刚参加3.17 MDP团队管理场次的读者请看)...
- Topcoder的使用方法
- 如何查看java安装成功_如何查看java是否安装成功
- OCR开源代码库介绍
- 【新知实验室】腾讯云TRTC接入测试以及状态同步功能重点验证
- 你真的了解LinkedBlockingQueue的put,add和offer的区别吗
- 财务分析中三张财务报表计算公式
- 如何批量将 Txt 文本文件转换为 jpeg、png、bmp 图片
- 网络安全入门:什么是防火墙,防火墙有哪些功能
- Unity 开关门脚本
热门文章
- Executors详解
- EChats图表的使用
- 面向对象(Oriented Object Programing)的本质
- taLend入门_组件_tFileInputXML
- 兔子拔萝卜的java游戏_教案小兔子拔萝卜游戏
- 蛙蛙推荐:蛙蛙牌广告鼓励算法
- BAPI_PO_CREATE1 PO净价从信息记录获取问题解决
- Centos7做软RAID5详细步骤
- (Windows)Anaconda创建虚拟环境安装tensorflow
- html5在线制作 知乎,html5canvas: 教你实现知乎登录动态粒子背景