您的位置:首页 > 移动开发 > Android开发

【移动开发】Android中WIFI开发总结(一)

2015-05-21 22:55 253 查看
【移动开发】Android中WIFI开发总结(一)转http://www.360doc.com/content/14/0402/10/15796455_365655135.shtml

package com.zhf.wifidemo.wifi.utils;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Iterator;

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;

/**

* WIFI管理类

* @author ZHF

*

*/

public class WifiAdmin {

private static WifiAdmin wifiAdmin = null;

private List<WifiConfiguration> mWifiConfiguration; //无线网络配置信息类集合(网络连接列表)

private List<ScanResult> mWifiList; //检测到接入点信息类 集合

//描述任何Wifi连接状态

private WifiInfo mWifiInfo;

WifiManager.WifiLock mWifilock; //能够阻止wifi进入睡眠状态,使wifi一直处于活跃状态

public WifiManager mWifiManager;

/**

* 获取该类的实例(懒汉)

* @param context

* @return

*/

public static WifiAdmin getInstance(Context context) {

if(wifiAdmin == null) {

wifiAdmin = new WifiAdmin(context);

return wifiAdmin;

}

return null;

}

private WifiAdmin(Context context) {

//获取系统Wifi服务 WIFI_SERVICE

this.mWifiManager = (WifiManager) context.getSystemService("wifi");

//获取连接信息

this.mWifiInfo = this.mWifiManager.getConnectionInfo();

}

/**

* 是否存在网络信息

* @param str 热点名称

* @return

*/

private WifiConfiguration isExsits(String str) {

Iterator localIterator = this.mWifiManager.getConfiguredNetworks().iterator();

WifiConfiguration localWifiConfiguration;

do {

if(!localIterator.hasNext()) return null;

localWifiConfiguration = (WifiConfiguration) localIterator.next();

}while(!localWifiConfiguration.SSID.equals("\"" + str + "\""));

return localWifiConfiguration;

}

/**锁定WifiLock,当下载大文件时需要锁定 **/

public void AcquireWifiLock() {

this.mWifilock.acquire();

}

/**创建一个WifiLock**/

public void CreateWifiLock() {

this.mWifilock = this.mWifiManager.createWifiLock("Test");

}

/**解锁WifiLock**/

public void ReleaseWifilock() {

if(mWifilock.isHeld()) { //判断时候锁定

mWifilock.acquire();

}

}

/**打开Wifi**/

public void OpenWifi() {

if(!this.mWifiManager.isWifiEnabled()){ //当前wifi不可用

this.mWifiManager.setWifiEnabled(true);

}

}

/**关闭Wifi**/

public void closeWifi() {

if(mWifiManager.isWifiEnabled()) {

mWifiManager.setWifiEnabled(false);

}

}

/**端口指定id的wifi**/

public void disconnectWifi(int paramInt) {

this.mWifiManager.disableNetwork(paramInt);

}

/**添加指定网络**/

public void addNetwork(WifiConfiguration paramWifiConfiguration) {

int i = mWifiManager.addNetwork(paramWifiConfiguration);

mWifiManager.enableNetwork(i, true);

}

/**

* 连接指定配置好的网络

* @param index 配置好网络的ID

*/

public void connectConfiguration(int index) {

// 索引大于配置好的网络索引返回

if (index > mWifiConfiguration.size()) {

return;

}

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

mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true);

}

/**

* 根据wifi信息创建或关闭一个热点

* @param paramWifiConfiguration

* @param paramBoolean 关闭标志

*/

public void createWifiAP(WifiConfiguration paramWifiConfiguration,boolean paramBoolean) {

try {

Class localClass = this.mWifiManager.getClass();

Class[] arrayOfClass = new Class[2];

arrayOfClass[0] = WifiConfiguration.class;

arrayOfClass[1] = Boolean.TYPE;

Method localMethod = localClass.getMethod("setWifiApEnabled",arrayOfClass);

WifiManager localWifiManager = this.mWifiManager;

Object[] arrayOfObject = new Object[2];

arrayOfObject[0] = paramWifiConfiguration;

arrayOfObject[1] = Boolean.valueOf(paramBoolean);

localMethod.invoke(localWifiManager, arrayOfObject);

return;

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 创建一个wifi信息

* @param ssid 名称

* @param passawrd 密码

* @param paramInt 有3个参数,1是无密码,2是简单密码,3是wap加密

* @param type 是"ap"还是"wifi"

* @return

*/

public WifiConfiguration createWifiInfo(String ssid, String passawrd,int paramInt, String type) {

//配置网络信息类

WifiConfiguration localWifiConfiguration1 = new WifiConfiguration();

//设置配置网络属性

localWifiConfiguration1.allowedAuthAlgorithms.clear();

localWifiConfiguration1.allowedGroupCiphers.clear();

localWifiConfiguration1.allowedKeyManagement.clear();

localWifiConfiguration1.allowedPairwiseCiphers.clear();

localWifiConfiguration1.allowedProtocols.clear();

if(type.equals("wt")) { //wifi连接

localWifiConfiguration1.SSID = ("\"" + ssid + "\"");

WifiConfiguration localWifiConfiguration2 = isExsits(ssid);

if(localWifiConfiguration2 != null) {

mWifiManager.removeNetwork(localWifiConfiguration2.networkId); //从列表中删除指定的网络配置网络

}

if(paramInt == 1) { //没有密码

localWifiConfiguration1.wepKeys[0] = "";

localWifiConfiguration1.allowedKeyManagement.set(0);

localWifiConfiguration1.wepTxKeyIndex = 0;

} else if(paramInt == 2) { //简单密码

localWifiConfiguration1.hiddenSSID = true;

localWifiConfiguration1.wepKeys[0] = ("\"" + passawrd + "\"");

} else { //wap加密

localWifiConfiguration1.preSharedKey = ("\"" + passawrd + "\"");

localWifiConfiguration1.hiddenSSID = true;

localWifiConfiguration1.allowedAuthAlgorithms.set(0);

localWifiConfiguration1.allowedGroupCiphers.set(2);

localWifiConfiguration1.allowedKeyManagement.set(1);

localWifiConfiguration1.allowedPairwiseCiphers.set(1);

localWifiConfiguration1.allowedGroupCiphers.set(3);

localWifiConfiguration1.allowedPairwiseCiphers.set(2);

}

}else {//"ap" wifi热点

localWifiConfiguration1.SSID = ssid;

localWifiConfiguration1.allowedAuthAlgorithms.set(1);

localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);

localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);

localWifiConfiguration1.allowedKeyManagement.set(0);

localWifiConfiguration1.wepTxKeyIndex = 0;

if (paramInt == 1) { //没有密码

localWifiConfiguration1.wepKeys[0] = "";

localWifiConfiguration1.allowedKeyManagement.set(0);

localWifiConfiguration1.wepTxKeyIndex = 0;

} else if (paramInt == 2) { //简单密码

localWifiConfiguration1.hiddenSSID = true;//网络上不广播ssid

localWifiConfiguration1.wepKeys[0] = passawrd;

} else if (paramInt == 3) {//wap加密

localWifiConfiguration1.preSharedKey = passawrd;

localWifiConfiguration1.allowedAuthAlgorithms.set(0);

localWifiConfiguration1.allowedProtocols.set(1);

localWifiConfiguration1.allowedProtocols.set(0);

localWifiConfiguration1.allowedKeyManagement.set(1);

localWifiConfiguration1.allowedPairwiseCiphers.set(2);

localWifiConfiguration1.allowedPairwiseCiphers.set(1);

}

}

return localWifiConfiguration1;

}

/**获取热点名**/

public String getApSSID() {

try {

Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]);

if (localMethod == null) return null;

Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]);

if (localObject1 == null) return null;

WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1;

if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID;

Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile");

if (localField1 == null) return null;

localField1.setAccessible(true);

Object localObject2 = localField1.get(localWifiConfiguration);

localField1.setAccessible(false);

if (localObject2 == null) return null;

Field localField2 = localObject2.getClass().getDeclaredField("SSID");

localField2.setAccessible(true);

Object localObject3 = localField2.get(localObject2);

if (localObject3 == null) return null;

localField2.setAccessible(false);

String str = (String) localObject3;

return str;

} catch (Exception localException) {

}

return null;

}

/**获取wifi名**/

public String getBSSID() {

if (this.mWifiInfo == null)

return "NULL";

return this.mWifiInfo.getBSSID();

}

/**得到配置好的网络 **/

public List<WifiConfiguration> getConfiguration() {

return this.mWifiConfiguration;

}

/**获取ip地址**/

public int getIPAddress() {

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

}

/**获取物理地址(Mac)**/

public String getMacAddress() {

return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();

}

/**获取网络id**/

public int getNetworkId() {

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

}

/**获取热点创建状态**/

public int getWifiApState() {

try {

int i = ((Integer) this.mWifiManager.getClass()

.getMethod("getWifiApState", new Class[0])

.invoke(this.mWifiManager, new Object[0])).intValue();

return i;

} catch (Exception localException) {

}

return 4; //未知wifi网卡状态

}

/**获取wifi连接信息**/

public WifiInfo getWifiInfo() {

return this.mWifiManager.getConnectionInfo();

}

/** 得到网络列表**/

public List<ScanResult> getWifiList() {

return this.mWifiList;

}

/**查看扫描结果**/

public StringBuilder lookUpScan() {

StringBuilder localStringBuilder = new StringBuilder();

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

{

localStringBuilder.append("Index_"+new Integer(i + 1).toString() + ":");

//将ScanResult信息转换成一个字符串包

//其中把包括:BSSID、SSID、capabilities、frequency、level

localStringBuilder.append((mWifiList.get(i)).toString());

localStringBuilder.append("\n");

}

return localStringBuilder;

}

/** 设置wifi搜索结果 **/

public void setWifiList() {

this.mWifiList = this.mWifiManager.getScanResults();

}

/**开始搜索wifi**/

public void startScan() {

this.mWifiManager.startScan();

}

/**得到接入点的BSSID**/

public String GetBSSID() {

return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: