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

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

/**

  • 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;//显示的列表不是历史记录

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

关于面试的充分准备

一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。

好了,希望对大家有所帮助。

接下来是整理的一些Android学习资料,有兴趣的朋友们可以关注下我免费领取方式

①Android开发核心知识点笔记

②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图

③面试精品集锦汇总

④全套体系化高级架构视频

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

gtp.com/2024/03/13/H4lCoPEF.jpg" />

关于面试的充分准备

一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。

好了,希望对大家有所帮助。

接下来是整理的一些Android学习资料,有兴趣的朋友们可以关注下我免费领取方式

①Android开发核心知识点笔记

②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图

[外链图片转存中…(img-UHLPD9TE-1713249304242)]

③面试精品集锦汇总

[外链图片转存中…(img-4PT0dN5h-1713249304243)]

④全套体系化高级架构视频

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

[外链图片转存中…(img-7pG3hg5G-1713249304244)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值