Android开发 无线Wifi+WifiUtil工具类(1)

}

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工具类

/**

  • 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) {

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

LINUX)

如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

[外链图片转存中…(img-oeAofIe6-1714408911860)]

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

[外链图片转存中…(img-jfbJqdYi-1714408911861)]

2.设计模式

[外链图片转存中…(img-EzCHjUTa-1714408911861)]

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

[外链图片转存中…(img-pCH5LCWZ-1714408911861)]

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

[外链图片转存中…(img-kxedk5Ky-1714408911862)]

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-XGa3Ykxx-1714408911862)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值