有时候需要打开关闭wifi,或者是坚持状态什么的,这里我写了个工具类来完成各种操作,今后还会添加其他的功能。比如链接某个加密/不加密的wifi

WifiAdmin.java

package com.example.testforwifilinkdemo;

import java.util.ArrayList;
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 {
private final static String TAG = "WifiAdmin";
public static final int IS_OPENING = 1,IS_CLOSING = 2,IS_OPENED = 3,IS_CLOSED = 4; private StringBuffer mStringBuffer = new StringBuffer();
private List<ScanResult> scanResultList;
private ScanResult mScanResult;
// 定义WifiManager对象
private WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 网络连接列表
private List<WifiConfiguration> mWifiConfigList;
// 定义一个WifiLock
WifiLock mWifiLock; /**
* 构造方法
*/
public WifiAdmin(Context context) {
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mWifiInfo = mWifiManager.getConnectionInfo();
mWifiConfigList = mWifiManager.getConfiguredNetworks();
} /**
* 打开Wifi网卡,能打开就返回true,无法打开返回false
*/
public boolean openNetCard() {
if (!mWifiManager.isWifiEnabled()) {
return mWifiManager.setWifiEnabled(true);
}
else{
return false;
}
} /**
* 关闭Wifi网卡,能关闭返回true,不能关就返回false
*/
public boolean closeNetCard() {
if (mWifiManager.isWifiEnabled()) {
return mWifiManager.setWifiEnabled(false);
}
else{
return false;
}
} /**
* 检查当前Wifi网卡状态,返回四种状态,如果出错返回-1
*/
public int getWifitate() {
int result = -1;
switch (mWifiManager.getWifiState()) {
case 0:
Log.i(TAG, "网卡正在关闭");
result = IS_CLOSING;
break;
case 1:
Log.i(TAG, "网卡已经关闭");
result = IS_CLOSED;
break;
case 2:
Log.i(TAG, "网卡正在打开");
result = IS_OPENING;
break;
case 3:
Log.i(TAG, "网卡已经打开");
result = IS_OPENED;
break;
default:
Log.i(TAG, "---_---晕......没有获取到状态---_---");
result = -1;
break;
}
return result;
} /**
* 扫描周边网络,判断周边是否有wifi,有就返回true,没有就返回false
*/
public boolean scan() {
if (getWifitate() == IS_OPENED) {
//开始扫描
mWifiManager.startScan();
//将扫描结果存入数据列中
scanResultList = mWifiManager.getScanResults();
if (scanResultList != null) {
return true;
}
}
return false;
} /**
* 得到附近wifi的扫描结果,是ScanResult对象
* 得到的是附近网络的结果集,没有就返回null
*/
public ArrayList<ScanResult> getScanResult() {
// 每次点击扫描之前清空上一次的扫描结果
if (mStringBuffer != null) {
mStringBuffer = new StringBuffer();
} scan();// 开始扫描网络
ArrayList<ScanResult> scanResultsList = new ArrayList<ScanResult>();
if (scanResultList != null) {
for (int i = 0; i < scanResultList.size(); i++) {
mScanResult = scanResultList.get(i);
scanResultsList.add(mScanResult); /*mStringBuffer = mStringBuffer.append("NO.").append(i)
.append(" :")
.append(mScanResult.SSID).append("->")
.append(mScanResult.BSSID).append("->")
.append(mScanResult.capabilities).append("->")
.append(mScanResult.frequency).append("->")
.append(mScanResult.level).append("->")
.append(mScanResult.describeContents()).append("\n\n");*/
}
//Log.i(TAG, mStringBuffer.toString());
return scanResultsList;
}
else {
return null;
}
} /**
* 判断指定的网络是否能被扫描到
* @param wifi_SSID
* @return 如果能够在周边发现指定的网络就返回true,否则返回false
*/
public boolean canScannable(String wifi_SSID) {
boolean canScannable = false;
scan();//开始扫描周边网络
//得到扫描到的wifi列表
if (scanResultList != null) {
for (int i = 0; i < scanResultList.size(); i++) {
System.out.println("scanResultList " + i + "----->" + scanResultList.get(i).SSID);
if (scanResultList.get(i).SSID.equals(wifi_SSID)) {
canScannable = true;//如果想要链接的wifi能够扫描到,那么就说明能够链接
break;
}
}
}
return canScannable;
} /**
* 得到指定网络的index(从0开始计数),找不到就返回-1
*/
public int getTagWifiId(String netName){
// 开始扫描网络
scan();
scanResultList = mWifiManager.getScanResults();
if (scanResultList != null) {
for (int i = 0; i < scanResultList.size(); i++) {
mScanResult = scanResultList.get(i);
if(mScanResult.SSID.equals(netName)){
return i;
}
String show = "No = "+i +
" SSID = "+mScanResult.SSID +
" capabilities = "+mScanResult.capabilities +
" level = "+mScanResult.level;
Log.i(TAG, show);
}
}
return -1;
} /**
* 断开当前连接的网络
*/
public void disconnectWifi() {
int netId = getCurrentNetworkId();
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
mWifiInfo = null;
} /**
* 检查当前网络状态
* 如果有wifi链接,返回true,如果没有就返回false
*/
public boolean getWifiConnectState() {
return mWifiInfo != null ? true : false;
} /**
* @return 当前网络的名字,如果没有就返回null,否则返回string
*/
public String getCurrentSSID(){
return (mWifiInfo == null) ? null :mWifiInfo.getSSID();
} /**
* 得到连接的ID,如果没有就返回0,否则返回正确的id
*/
public int getCurrentNetworkId() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
} /**
* 得到IP地址,出错时返回0
*/
public int getCurrentIPAddress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
} /**
* 得到MAC地址
* @return 出錯了返回null
*/
public String getCurrentMacAddress() {
return (mWifiInfo == null) ? null : mWifiInfo.getMacAddress();
} /**
* 得到接入点的BSSID
* @return 出錯返回null
*/
public String getCurrentBSSID() {
return (mWifiInfo == null) ? null : mWifiInfo.getBSSID();
} /**
* 得到WifiInfo的所有信息包
* @return 出错了返回null
*/
public WifiInfo getCurrentWifiInfo() {
return (mWifiInfo == null) ? null : mWifiInfo;
} // 锁定WifiLock
public void acquireWifiLock() {
mWifiLock.acquire();
} // 解锁WifiLock
public void releaseWifiLock() {
// 判断时候锁定
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
} // 创建一个WifiLock
public void creatWifiLock() {
mWifiLock = mWifiManager.createWifiLock("Test");
} // 得到配置好的网络
public List<WifiConfiguration> getConfiguration() {
return mWifiConfigList;
} /**
* @param index
* @return 没有连接到返回false,正在连接则返回true
*/
public boolean connectConfiguratedWifi(String wifi_SSID) {
//如果当前网络不是想要链接的网络,要连接的网络是配置过的,并且要连接的网络能够被扫描到
if (getCurrentSSID().indexOf(wifi_SSID) == -1 ) {
if (getWifiConfigurated(wifi_SSID) != -1 && canScannable(wifi_SSID)) {
mWifiManager.enableNetwork(getWifiConfigurated(wifi_SSID), true);
}
else {
return false;
}
}
return true;
} /**
* 判断要连接的wifi名是否已经配置过了
* @return 返回要连接的wifi的ID,如果找不到就返回-1
*/
public int getWifiConfigurated(String wifi_SSID) {
int id = -1;
if (mWifiConfigList != null) {
for (int j = 0; j < mWifiConfigList.size(); j++) {
if (mWifiConfigList.get(j).SSID.equals("\"" + wifi_SSID + "\"")) {
//如果要连接的wifi在已经配置好的列表中,那就设置允许链接,并且得到id
id = mWifiConfigList.get(j).networkId;
break;
}
}
}
return id;
} }

测试代码

package com.kale.socketactivity;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List; import android.net.wifi.ScanResult;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WifiAdmin wifi = new WifiAdmin(this); //wifi.closeNetCard();
//wifi.openNetCard();
/*switch (wifi.getNetCardState()) {
case WifiAdmin.IS_CLOSED:
System.out.println(WifiAdmin.IS_CLOSED);
break;
case WifiAdmin.IS_CLOSING:
System.out.println(WifiAdmin.IS_CLOSING);
break;
case WifiAdmin.IS_OPENED:
System.out.println(WifiAdmin.IS_OPENED);
break;
case WifiAdmin.IS_OPENING:
System.out.println(WifiAdmin.IS_OPENING);
break;
default:
break;
}*/
//wifi.scan();
//wifi.getScanResult();
/*List<ScanResult> list = wifi.getScanResult();
for (int i = 0; i < list.size(); i++) {
System.out.println("No = "+ i);
System.out.println("BSSID = "+ list.get(i).BSSID);
System.out.println("capabilities = " + list.get(i).capabilities);
System.out.println("frequency = " + list.get(i).frequency);
System.out.println("level = " + list.get(i).level);
System.out.println("SSID = " + list.get(i).SSID);
System.out.println("timestamp = " + list.get(i).timestamp); }*/ //System.out.println("你选择的网络的index为"+wifi.getUniqueId("CMCC-EDU"));
//wifi.disconnectWifi();
//wifi.getWifiConnectState();
/* System.out.println("当前网络的BSSID = "+wifi.getCurrentBSSID() + "\n"
+"Ip = "+wifi.getCurrentIPAddress() + "\n"
+"Mac = "+wifi.getCurrentMacAddress() + "\n"
+"id = "+wifi.getCurrentNetworkId() + "\n"
+"ssid = "+wifi.getCurrentSSID() + "\n"
+"wifiInfo = "+wifi.getCurrentWifiInfo());*/ } }

操作Wifi的工具类的更多相关文章

  1. 操作集合的工具类Collections

    1       操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操 ...

  2. Java操作字符串的工具类

    操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...

  3. Java操作图片的工具类

    操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...

  4. 【转载】C#工具类:实现文件操作File的工具类

    在应用程序的开发中,文件操作的使用基本上是必不可少的,FileStream类.StreamWriter类.Directory类.DirectoryInfo类等都是文件操作中时常涉及到的类,我们可以通过 ...

  5. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  6. 自定义的操作Cookie的工具类

    可以在SpringMVC等环境中使用的操作Cookie的工具类 package utils; import java.io.UnsupportedEncodingException; import j ...

  7. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  8. Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

    FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  9. 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!

    转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...

随机推荐

  1. hdu 1754 线段树(单点替换 区间最值)

    Sample Input5 61 2 3 4 5Q 1 5 //1-5结点的最大值U 3 6 //将点3的数值换成6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output5659 # i ...

  2. Z字形变换

    将字符串 "PAYPALISHIRING" 以 Z 字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"PAHN ...

  3. 【BZOJ】4349: 最小树形图

    题解 我们只考虑给每个点买一个,之后每个点就可以用最低价格买了 根据最小树形图的算法,就是不断给每个点入度的边找一条最小的 如果构成了树形图就退出,否则把形成了环的点缩成一个点,加上环的权值,然后把指 ...

  4. 【LOJ】#2550. 「JSOI2018」机器人

    题解 我不会打表找规律啊QAQ 规律就是 对于\(n = m\)我们每一条左下到右上的对角线上的点的走法都是一样的且每n步一个轮重复 对于\(n != m\)我们找到最大公约数\(d\),在每个\(d ...

  5. python3脚本获取本机公网ip

    python脚本获取本机公网ip   1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.代码实现 import requests import re r ...

  6. 006.LVM快照

    一 快照介绍 快照就是将当时的系统信息记录下来,就好像照相一样,未来若有任何资料变动了,则原始资料会被移动到快照区,没有被改动的区域则由快照区与档案系统共享. 二 快照原理 当建立快照区时,LVM会预 ...

  7. Eclipse从SVN检出maven项目后的一些配置

    Eclipse从SVN检出maven项目后,会发现它只是一个普通的java project,如图: 这里我们需要把它转成maven-webapp,并调整相关属性,设置运行环境,关联相关jar目录等. ...

  8. Linux usb 驱动程序范例

                     linxu_usb驱动之框架 USB骨架程序可以被看做一个最简单的USB设备驱动的实例. 首先看看USB骨架程序的usb_driver的定义 [cpp] view p ...

  9. 5969 [AK]刻录光盘

    题目描述 Description • 在FJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时 ...

  10. STL中优先队列的使用

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出的行为特征.我们来说一下C++的 ...