Android 实现WiFi列表显示与连接

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_wifi_list);

wiFiAdmin = new WifiAdmin(WifiListActivity.this);

initLayout();

getAllNetWorkList();

}

public void initLayout() {

listWifi = (ListView) findViewById(R.id.listWiFi);

RelativeLayout btnToSettingFromWiFi = (RelativeLayout) findViewById(R.id.btnToSettingFromWiFi);

btnToSettingFromWiFi.setOnClickListener(new MyOnClickListener());

// 刷新按钮和进度条

updateProgress = (ProgressBar) findViewById(R.id.updateProgress);

updateProgress.setVisibility(View.INVISIBLE);

updateButton = (Button) findViewById(R.id.updateButton);

updateButton.setVisibility(View.VISIBLE);

updateButton.setOnClickListener(new MyOnClickListener());

SwitchButton switchWifi = (SwitchButton) findViewById(R.id.switchWifi);

wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

switchWifi.setChecked(wifiManager.isWifiEnabled());

switchWifi.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView,

boolean isChecked) {

wifiManager.setWifiEnabled(isChecked);

// 更新WiFi列表

if (isChecked) {

listWifi.setVisibility(View.VISIBLE);

updateProgress.setVisibility(View.VISIBLE);

updateButton.setVisibility(View.INVISIBLE);

new Thread(new refreshWifiThread()).start();

} else {

listWifi.setVisibility(View.GONE);

}

}

});

}

final Handler refreshWifiHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case 1:

getAllNetWorkList();

updateProgress.setVisibility(View.INVISIBLE);

updateButton.setVisibility(View.VISIBLE);

break;

default:

break;

}

}

};

public class refreshWifiThread implements Runnable {

@Override

public void run() {

try {

Thread.sleep(3000);

Message message = new Message();

message.what = 1;

refreshWifiHandler.sendMessage(message);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

private class MyOnClickListener implements OnClickListener {

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btnToSettingFromWiFi:

finish();

break;

case R.id.updateButton:

updateButton.setVisibility(View.INVISIBLE);

updateProgress.setVisibility(View.VISIBLE);

new Thread(new refreshWifiThread()).start();

break;

default:

break;

}

}

}

public void getAllNetWorkList() {

wifiArray = new ArrayList();

if (sb != null) {

sb = new StringBuffer();

}

wiFiAdmin.startScan();

list = wiFiAdmin.getWifiList();

if (list != null) {

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

mScanResult = list.get(i);

WifiInfo wifiInfo = new WifiInfo(mScanResult.BSSID,

mScanResult.SSID, mScanResult.capabilities,

mScanResult.level);

wifiArray.add(wifiInfo);

}

wifiInfoAdapter = new WiFiInfoAdapter(getApplicationContext(),

wifiArray);

listWifi.setAdapter(wifiInfoAdapter);

//

wiFiAdmin.getConfiguration();

listWifi.setOnItemClickListener(new AdapterView.OnItemClickListener() {

String wifiItemSSID = null;

public void onItemClick(android.widget.AdapterView<?> parent,

android.view.View view, int position, long id) {

Log.d(Constant.TAG, “BSSID:” + list.get(position).BSSID);

// 连接WiFi

wifiItemSSID = list.get(position).SSID;

int wifiItemId = wiFiAdmin.IsConfiguration(“”"

  • list.get(position).SSID + “”");

if (wifiItemId != -1) {

if (wiFiAdmin.ConnectWifi(wifiItemId)) {

// 连接已保存密码的WiFi

Toast.makeText(getApplicationContext(), “正在连接”,

Toast.LENGTH_SHORT).show();

updateButton.setVisibility(View.INVISIBLE);

updateProgress.setVisibility(View.VISIBLE);

new Thread(new refreshWifiThread()).start();

}

} else {

// 没有配置好信息,配置

WifiPswDialog pswDialog = new WifiPswDialog(

WifiListActivity.this,

new OnCustomDialogListener() {

@Override

public void back(String str) {

wifiPassword = str;

if (wifiPassword != null) {

int netId = wiFiAdmin

.AddWifiConfig(list,

wifiItemSSID,

wifiPassword);

if (netId != -1) {

wiFiAdmin.getConfiguration();// 添加了配置信息,要重新得到配置信息

if (wiFiAdmin

.ConnectWifi(netId)) {

// 连接成功,刷新UI

updateProgress

.setVisibility(View.VISIBLE);

updateButton

.setVisibility(View.INVISIBLE);

new Thread(

new refreshWifiThread())

.start();

}

} else {

// 网络连接错误

}

} else {

}

}

});

pswDialog.show();

}

}

});

}

}

}

然后是WiFiAdmin:

package com.tchip.carlauncher.util;

import java.util.List;

import android.content.Context;

import android.net.wifi.ScanResult;

import android.net.wifi.WifiConfiguration;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.net.wifi.WifiManager.WifiLock;

import android.util.Log;

public class WifiAdmin {

/**

  • 定义一个WifiManager对象,提供Wifi管理的各种主要API,主要包含wifi的扫描、建立连接、配置信息等

*/

private WifiManager mWifiManager;

// WIFIConfiguration描述WIFI的链接信息,包括SSID、SSID隐藏、password等的设置

private List wifiConfigList;

// 定义一个WifiInfo对象

private WifiInfo mWifiInfo;

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

private List mWifiList;

// 网络连接列表

private List mWifiConfigurations;

WifiLock mWifiLock;

public static final int TYPE_NO_PASSWD = 0x11;

public static final int TYPE_WEP = 0x12;

public static final int TYPE_WPA = 0x13;

public WifiAdmin(Context context) {

// 获得WifiManager对象

mWifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

// 取得WifiInfo对象

mWifiInfo = mWifiManager.getConnectionInfo();

}

/**

  • 打开wifi

*/

public void openWifi() {

if (!mWifiManager.isWifiEnabled()) {

mWifiManager.setWifiEnabled(true);

}

}

/**

  • 关闭wifi

*/

public void closeWifi() {

if (!mWifiManager.isWifiEnabled()) {

mWifiManager.setWifiEnabled(false);

}

}

/**

  • 检查当前wifi状态

  • @return

*/

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”);

}

/**

  • 得到配置好的网络

  • @return

*/

public List getWiFiConfiguration() {

return mWifiConfigurations;

}

/**

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

  • @param index

*/

public void connetionConfiguration(int index) {

if (index > mWifiConfigurations.size()) {

return;

}

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

mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId,

true);

}

public void startScan() {

mWifiManager.startScan();

// 得到扫描结果

mWifiList = mWifiManager.getScanResults();

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

mWifiConfigurations = mWifiManager.getConfiguredNetworks();

}

/**

  • 得到网络列表

  • @return

*/

public List getWifiList() {

return mWifiList;

}

/**

  • 查看扫描结果

  • @return

*/

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

  • @return

*/

public int getNetWordId() {

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

}

/**

  • 得到wifiInfo的所有信息

  • @return

*/

public String getWifiInfo() {

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

}

/**

  • 添加一个网络并连接

  • @param configuration

*/

public void addNetwork(WifiConfiguration configuration) {

int wcgId = mWifiManager.addNetwork(configuration);

mWifiManager.enableNetwork(wcgId, true);

}

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

{

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

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

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

img

img

img

img

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

[外链图片转存中…(img-v7ZPJGCH-1711548083521)]

[外链图片转存中…(img-UmiYZ724-1711548083521)]

[外链图片转存中…(img-35Ne7cnF-1711548083522)]

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
    [外链图片转存中…(img-4okEhn2m-1711548083522)]
  • 面试技巧+面试题
    [外链图片转存中…(img-GHL0XkQE-1711548083522)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值