下面是 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网络变化等...相关推荐

  1. Android监听手机网络变化

    Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...

  2. Android 监听wifi总结

    功能实现:控制wifi开关,连上某个特定的wifi. 首先先上个wifi工具类,此类转载网上一人,出处不明了. package rodar.rgs.conference.utils;import ja ...

  3. Android 监听 WiFi 开关状态

    Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...

  4. android 信号强度变化,Android监听WIFI网络的变化并且获得当前信号强度

    MainActivity如下: package cc.testwifi; import android.os.Bundle; import android.app.Activity; /** * De ...

  5. 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓网络连接情况全解:包括网络连接状态的监听.网络数据使用状态的监听.获取当前网络连接情况.启动wifi.获取当前连接wifi的网络情况.扫描wifi ...

  6. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

    本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...

  7. java wifi监听_Android 监听 WiFi 开关状态

    Android 监听 WiFi 开关状态 WifiSwitch_Presenter 源码: package com.yiba.wifi.sdk.lib.presenter; import androi ...

  8. android 监听手机电量变化

    今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...

  9. 安卓广播监听WiFi信号强弱的变化

    安卓开发过程中,有可能会遇到监听WiFi信号强弱的需求,比如:一些应用隐藏掉手机自带的状态栏,就需要自己实现监听WiFi信号的强弱,还有电池电量,还有时间的变化:废话不多说,下面看图,自己实现的状态栏 ...

最新文章

  1. Skype for Business Server 2015-升级-实战公开课(免费视频)
  2. 报名开启 | 李开复等AI大咖齐聚量子位MEET大会,邀你共探新形势下智能产业发展之路...
  3. mysql 查询表总行数字段_mysql中怎么查询表中的字段个数
  4. qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
  5. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
  6. 皮肤可配置化:变量、样式分离
  7. study notes for python
  8. 现代程序设计 作业 第1次
  9. 操作系统信号量和管程
  10. 2叉树排序缺失元素查找
  11. 敏捷开发团队管理系列之五:大型研发团队的切分(刚参加3.17 MDP团队管理场次的读者请看)...
  12. Topcoder的使用方法
  13. 如何查看java安装成功_如何查看java是否安装成功
  14. OCR开源代码库介绍
  15. 【新知实验室】腾讯云TRTC接入测试以及状态同步功能重点验证
  16. 你真的了解LinkedBlockingQueue的put,add和offer的区别吗
  17. 财务分析中三张财务报表计算公式
  18. 如何批量将 Txt 文本文件转换为 jpeg、png、bmp 图片
  19. 网络安全入门:什么是防火墙,防火墙有哪些功能
  20. Unity 开关门脚本

热门文章

  1. Executors详解
  2. EChats图表的使用
  3. 面向对象(Oriented Object Programing)的本质
  4. taLend入门_组件_tFileInputXML
  5. 兔子拔萝卜的java游戏_教案小兔子拔萝卜游戏
  6. 蛙蛙推荐:蛙蛙牌广告鼓励算法
  7. BAPI_PO_CREATE1 PO净价从信息记录获取问题解决
  8. Centos7做软RAID5详细步骤
  9. (Windows)Anaconda创建虚拟环境安装tensorflow
  10. html5在线制作 知乎,html5canvas: 教你实现知乎登录动态粒子背景