Android开发 无线Wifi+WifiUtil工具类,直面秋招
for(int i = 0;i < wifiList.size(); i++){
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工具
《Android學習筆記總結+最新移動架構視頻+大廠安卓面試真題+項目實戰源碼講義》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整內容開源分享
類**
/**
- 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”}
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)
總結
以上是生活随笔為你收集整理的Android开发 无线Wifi+WifiUtil工具类,直面秋招的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下安装jre 7
- 下一篇: Android源码下载