Android开发 无线Wifi+WifiUtil工具类

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

//扫描先清除数据

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)

return;

for (WifiConfiguration result : configuredNetworks) {

wifiSSIDs.add(result.SSID);

}

//刷新适配器

adapter.notifyDataSetChanged();

}

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

}

/**

  • 点击Wife视图列表数据后的回调方法,这里是连接WIfe

*/

boolean isClickHistory = false;

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//判断是否是点击的历史记录

if (isClickHistory) {

boolean connOk = wifiUtil.connetionConfiguration(position);

if (connOk) {

Toast.makeText(MainActivity.this, “Wife连接成功”, Toast.LENGTH_SHORT).show();

finish();

} else {

Toast.makeText(MainActivity.this, “Wife连接失败”, Toast.LENGTH_SHORT).show()​
;

}

} else {

//连接wifi

ScanResult sr = wifiList.get(position);//获取点击的扫描信息

final String SSID = sr.SSID;//获取Wife的SSID

final int type = wifiUtil.getType(sr.capabilities);

if (type == 1) {//没有密码的Wife情况

WifiConfiguration config = wifiUtil.createWifiInfo(SSID, “”, type);//第二个空就是密码

wifiUtil.addNetWork(config);

} else {

//有密码

final EditText et = new EditText(MainActivity.this);

et.setHint(“输入wifi密码”);

new AlertDialog.Builder(MainActivity.this)

.setTitle(“设置密码”)

.setView(et)

.setNeutralButton(“取消”, null)

.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

WifiConfiguration config = wifiUtil.createWifiInfo(SSID, et.getText().toString(), type);

boolean conn = wifiUtil.addNetWork(config);

//判断密码是否连接成功

if (conn) {

Toast.makeText(MainActivity.this, “Wife连接成功”, Toast.LENGTH_SHORT).show();

finish();//关闭页面

} else {

Toast.makeText(MainActivity.this, “Wife连接失败”, Toast.LENGTH_SHORT).show();

}

}

}).create().show();

}

}

}

}

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
ivity.this)

.setTitle(“设置密码”)

.setView(et)

.setNeutralButton(“取消”, null)

.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

WifiConfiguration config = wifiUtil.createWifiInfo(SSID, et.getText().toString(), type);

boolean conn = wifiUtil.addNetWork(config);

//判断密码是否连接成功

if (conn) {

Toast.makeText(MainActivity.this, “Wife连接成功”, Toast.LENGTH_SHORT).show();

finish();//关闭页面

} else {

Toast.makeText(MainActivity.this, “Wife连接失败”, Toast.LENGTH_SHORT).show();

}

}

}).create().show();

}

}

}

}

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

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

[外链图片转存中…(img-xwV5exkP-1719083642858)]一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值