for(int i = 0;i < wifiList.size(); i++){

ScanResult wifi = wifiList.get(i);

if(wifi.SSID.equals(ssid)){

Log.i(“AddWifiConfig”,“equals”);

WifiConfiguration wifiCong = new WifiConfiguration();

wifiCong.SSID = “”"+wifi.SSID+""";//“转义字符,代表”

wifiCong.preSharedKey = “”"+pwd+""";//WPA-PSK密码

wifiCong.hiddenSSID = false;

wifiCong.status = WifiConfiguration.Status.ENABLED;

wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特

定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1

if(wifiId != -1){

return wifiId;

}

}

}

return wifiId;

}

7.根据步骤6配置好需要连接的WIFI密码信息后,下面通过networkId连接指定WIFI。在连接经过步骤6刚添加配置信息的WIFI信息之前需要重新执行下步骤4,得到新的配置好信息的列表

//连接指定Id的WIFI

public boolean ConnectWifi(int wifiId){

for(int i = 0; i < wifiConfigList.size(); i++){

WifiConfiguration wifi = wifiConfigList.get(i);

if(wifi.networkId == wifiId){

while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接

//status:0–已经连接,1–不可连接,2–可以连接

Log.i(“ConnectWifi”,String.valueOf(wifiConfigList.get(wifiId).status));

}

return true;

}

}

return false;

}

二、Wifi的开发示例程序

这个程序运行后可以扫描周边的Wifi,并且做连接,还有历史记录

程序运行后的界面:

可以点击对应的按钮,显示周边的wifi信息,和连接的Wifi历史记录。点击某个Wifi条目,就是连接的操作,输入正确的密码就可以完成Wifi的连接

(一) 添加权限

(二) 布局代码

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<Button

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:onClick=“open”

android:text=“打开wifi” />

<Button

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:onClick=“close”

android:text=“关闭wifi” />

<Button

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:onClick=“scan”

android:text=“扫描wifi” />

<Button

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:onClick=“getGood”

android:text=“获取连接过的wifi配置信息” />

<ListView

android:id="@+id/lv"

android:layout_width=“match_parent”

android:layout_height=“wrap_content” />

**(三) WifiUtil工具

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

类**

/**

  • wife使用的工具类

*/

public class WifiUtil {

// WifiManager.WIFI_STATE_ENABLED WiFi已打开

// WifiManager.WIFI_STATE_ENABLING WiFi打开中

// WifiManager.WIFI_STATE_DISABLING WiFi关闭中

// WifiManager.WIFI_STATE_DISABLED WiFi已关闭

// WifiManager.WIFI_STATE_UNKNOWN 未知的WiFi状态

// 定义一个WifiManager对象

private WifiManager mWifiManager;

// 定义一个WifiInfo对象

private WifiInfo mWifiInfo;

// 扫描出的网络连接列表

private List mWifiList;

// 网络连接列表

private List mWifiConfigurations;

WifiLock mWifiLock;

Context mContext;

//传入上下文

public WifiUtil(Context context) {

// 取得WifiManager对象

mContext = context;

mWifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

// 取得WifiInfo对象

mWifiInfo = mWifiManager.getConnectionInfo();

}

// 打开wifi

public void openWifi() {

if (!mWifiManager.isWifiEnabled()) {

mWifiManager.setWifiEnabled(true);

}

}

//判断wife是否是连接状态

public boolean isConn() {

ConnectivityManager connManager = (ConnectivityManager) mContext

.getSystemService(mContext.CONNECTIVITY_SERVICE);

NetworkInfo mWifi = connManager

.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

return mWifi.isConnected();

}

// 关闭wifi

public void closeWifi() {

if (mWifiManager.isWifiEnabled()) {

mWifiManager.setWifiEnabled(false);

}

}

// 检查当前wifi状态

public int checkState() {

return mWifiManager.getWifiState();

}

// 锁定wifiLock

public void acquireWifiLock() {

mWifiLock.acquire();

}

// 解锁wifiLock

public void releaseWifiLock() {

// 判断是否锁定

if (mWifiLock.isHeld()) {

mWifiLock.acquire();

}

}

// 创建一个wifiLock

public void createWifiLock() {

mWifiLock = mWifiManager.createWifiLock(“test”);

}

// 得到配置好的网络

public List getConfiguration() {

return mWifiConfigurations;

}

// 指定配置好的网络进行连接

public boolean connetionConfiguration(int index) {

if (index > mWifiConfigurations.size()) {

return false;

}

// 连接配置好指定ID的网络

return mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);

}

public void startScan() {

mWifiManager.startScan();

// 得到扫描结果

mWifiList = mWifiManager.getScanResults();

// 得到配置好的网络连接

mWifiConfigurations = mWifiManager.getConfiguredNetworks();

}

// 得到网络列表

public List getWifiList() {

return mWifiList;

}

// 查看扫描结果

public StringBuffer lookUpScan() {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < mWifiList.size(); i++) {

sb.append(“Index_” + new Integer(i + 1).toString() + “:”);

// 将ScanResult信息转换成一个字符串包

// 其中把包括:BSSID、SSID、capabilities、frequency、level

sb.append((mWifiList.get(i)).toString()).append("\n");

}

return sb;

}

public String getMacAddress() {

return (mWifiInfo == null) ? “NULL” : mWifiInfo.getMacAddress();

}

public String getBSSID() {

return (mWifiInfo == null) ? “NULL” : mWifiInfo.getBSSID();

}

public int getIpAddress() {

return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();

} // 得到连接的ID

public String getSSID() {

return (mWifiInfo == null) ? “” : mWifiInfo.getSSID().replace(""", “”);

} // 得到连接的ID

public int getNetWordId() {

return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();

} // 得到wifiInfo的所有信息

public String getWifiInfo() {

return (mWifiInfo == null) ? “NULL” : mWifiInfo.toString();

}

public String getGateway() {

return mWifiInfo == null ? “NULL”
intToIp(mWifiManager.getDhcpInfo().gateway);

}

private String intToIp(int paramInt) {

return (paramInt & 0xFF) + “.” + (0xFF & paramInt >> 8) + “.”

  • (0xFF & paramInt >> 16) + “.” + (0xFF & paramInt >> 24);

}

// 添加一个网络并连接

public boolean addNetWork(WifiConfiguration configuration) {

int wcgId = mWifiManager.addNetwork(configuration);

return mWifiManager.enableNetwork(wcgId, true);

}

// 断开指定ID的网络

public void disConnectionWifi(int netId) {

mWifiManager.disableNetwork(netId);

mWifiManager.disconnect();

}

public WifiConfiguration createWifiInfo(String SSID, String Password,

int TYPE) {

WifiConfiguration config = new WifiConfiguration();

config.allowedAuthAlgorithms.clear();

config.allowedGroupCiphers.clear();

config.allowedKeyManagement.clear();

config.allowedPairwiseCiphers.clear();

config.allowedProtocols.clear();

config.SSID = “”" + SSID + “”";

WifiConfiguration tempConfig = this.IsExsits(SSID);

if (tempConfig != null) {

mWifiManager.removeNetwork(tempConfig.networkId);

}

if (TYPE == 1) // WIFICIPHER_NOPASS

{

// config.wepKeys[0] = “”;

config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

// config.wepTxKeyIndex = 0;

}

if (TYPE == 2) // WIFICIPHER_WEP

{

config.hiddenSSID = true;

config.wepKeys[0] = “”" + Password + “”";

config.allowedAuthAlgorithms

.set(WifiConfiguration.AuthAlgorithm.SHARED);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);

config.allowedGroupCiphers

.set(WifiConfiguration.GroupCipher.WEP104);

config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

config.wepTxKeyIndex = 0;

}

if (TYPE == 3) // WIFICIPHER_WPA WPA2

{

config.preSharedKey = “”" + Password + “”";

config.hiddenSSID = true;

config.allowedAuthAlgorithms

.set(WifiConfiguration.AuthAlgorithm.OPEN);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

config.allowedPairwiseCiphers

.set(WifiConfiguration.PairwiseCipher.TKIP);

// config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

config.allowedPairwiseCiphers

.set(WifiConfiguration.PairwiseCipher.CCMP);

config.status = WifiConfiguration.Status.ENABLED;

}

return config;

}

//判断密码的类别

public int getType(String capabilities) //[wpa]

{

//[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]

// [WPA2-PSK-CCMP][ESS]

//[ESS]

if (capabilities.contains(“WPA”))

return 3;

else if (capabilities.contains(“WEP”))

return 2;

else

return 1;

}

//根据SSID判断这个WIFE设置对象是否存在

private WifiConfiguration IsExsits(String SSID) {

List existingConfigs = mWifiManager

.getConfiguredNetworks();

for (WifiConfiguration existingConfig : existingConfigs) {

if (existingConfig.SSID.equals(""" + SSID + “”")) {

return existingConfig;

}

}

return null;

}

}

(四) 主方法的类代码:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{

WifiUtil wifiUtil;//定义Wife工具类

ListView listView;//显示Wife的数据列表

ArrayAdapter adapter;//列表的适配器

List wifiSSIDs = new ArrayList<>();//列表的数据

WifiManager wifiManager;//Wife管理器

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

wifiUtil = new WifiUtil(this);

wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取Wife管理器

listView = (ListView) findViewById(R.id.lv);

//创建适配器,并把适配器设置到ListView中

adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, wifiSSIDs);

listView.setAdapter(adapter);

//给ListView设置点击事件,点击后连接Wife

listView.setOnItemClickListener(this);

}

/**

  • 打开Wife

*/

public void open(View view) {

wifiUtil.openWifi();

}

/**

  • 关闭Wife

*/

public void close(View view) {

wifiUtil.closeWifi();

}

/**

  • 扫描Wife

*/

List wifiList = new ArrayList<>();

public void scan(View view) {

isClickHistory = false;//显示的列表不是历史记录

//扫描先清除数据

wifiSSIDs.clear();

wifiList.clear();

wifiUtil.startScan();//扫描Wife

wifiList = wifiUtil.getWifiList();

//获取列表中的SSID并显示出来

for (ScanResult scanResult : wifiList) {

wifiSSIDs.add(scanResult.SSID);

}

//刷新适配器

adapter.notifyDataSetChanged();

}

/**

  • 获取连接过的Wife数据

*/

List configuredNetworks = new ArrayList<>();

public void getGood(View view) {

isClickHistory = true;//显示的列表是历史记录

//扫描先清除数据

wifiSSIDs.clear();

if (configuredNetworks != null) {

configuredNetworks.clear();

//获取历史记录

configuredNetworks = wifiUtil.getConfiguration();

if (configuredNetworks == null)

Android开发 无线Wifi+WifiUtil工具类,直面秋招相关推荐

  1. Android开发 无线Wifi+WifiUtil工具类,android开发网格布局

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

  3. Android开发 几个常用工具类

    本文出自[张鸿洋的博客]并 做了部分修改. 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311 打开大家手上的项目,基 ...

  4. Android开发:手机震动工具类

    新思路,如果你在做关于通知Notification方便的工作,在涉及到多种通知方式组合时(例如:铃声.轻震动.强震动等),感觉到系统提供的API比较吃力的话,建议可以自己来实现通知效果,根据开发经验, ...

  5. android 字体像素转换工具类_Android开发之拼音转换工具类PinyinUtils示例

    本文实例讲述了Android开发之拼音转换工具类PinyinUtils.分享给大家供大家参考,具体如下: 1.首先下载pinyin4j-2.5.0.jar,拷贝到工程的lib目录里 或者点击此处本站下 ...

  6. 最全Android 开发和安全系列工具

    [阿里聚安全出品]史上最全Android 开发和安全系列工具 作者 菜刀文 关注 2017.02.20 00:08 字数 4554 阅读 725评论 1喜欢 29 作者:阿里聚安全 地址:https: ...

  7. Android Studio无线Wifi调试手机的两种方案

    Android Studio无线Wifi调试手机的两种方案 第一种方式 使用adbWireless连接 第二种方式 使用插件Android Wifi ADB连接 总结 第一种方式 使用adbWirel ...

  8. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  9. 最简单DIY基于ESP8266的智能彩灯⑥(Android开发通过WIFI控制彩灯实现表白神器)

    ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...

  10. IOS开发基础之音频工具类封装AVAudioPlayer

    IOS开发基础之音频工具类封装AVAudioPlayer 源码在我的主页下面 ,项目名称是AVAudioPlayer 关键性代码 工具类的封装 // // LJAudioTool.h // AVAud ...

最新文章

  1. Flask上下文管理源码分析
  2. 计算机视觉-自定义对象检测器
  3. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T21——T25
  4. SpringBoot之使用(一)
  5. 隐藏桌面图标软件——CoverDesk for Mac免激活版
  6. springmuvc如何设置jsp的input跳转_小程序有链接吗?如何获取小程序的链接?
  7. 数字功放芯片品牌大全
  8. 单片机---HLK-W801图形框架LVGL下开发(六)
  9. 金 融 量 化 分 析 • JoinQuant • 第 七 篇
  10. Golang内存逃逸
  11. 免费ftp上传工具,三款免费的ftp上传工具
  12. openid php steam,在Android中使用openID进行Steam登录
  13. 《裂变式创业》读书心得
  14. c#加密:二、散列法 MD5、SHA256、SHA512
  15. oracle 取月份的第一天
  16. 关于盛大热血传奇(传奇2)!!!
  17. 学javaweb要先学java吗_怎么入门Java Web,我应该先学什么?
  18. android平板开箱,安卓平板不行了吗?小米平板4乞丐版开箱体验
  19. STM32之usart
  20. 金蝶K3 WISE版本过服务期后打补丁方法

热门文章

  1. idea将本地新项目上传至svn
  2. ffmpeg完全教程
  3. Opencv LBP特征
  4. Redis教程(全面实战教程)
  5. RMAN数据库完全备份和恢复
  6. 生物医学信号检测与处理实验3——1微电阻梁
  7. Html实现QQ音乐首页(响应式)
  8. eclipse语言包安装后如何进行英语中文切换
  9. 苹果智能家居的未来之路
  10. 基于JEECG框架,前台VUE,后台java,导入导出