[Android]AndroidでのWIFI開発のまとめ

17101 ワード

WIFIは無線ネットワーク技術であり、一般的には無線ルータを使用する.では、この無線ルータの信号カバーの範囲内でWIFI接続方式でネットワークを接続することができます.ワイヤレスルータがADSL回線または他のネットワーク回線に接続されている場合は、「ホットスポット」とも呼ばれます.
AndroidでWifiを操作するには、android自体がandroidで役立つパッケージを提供しています.net.wifiパッケージの下には、主に以下のクラスとインタフェースが含まれています.
1.ScanResult
主に、検出されたアクセスポイント、アクセスポイントのアドレス、アクセスポイントの名前、アイデンティティ認証、周波数、信号強度などの情報を記述するために使用される.実はwifiハードウェアのスキャンで周辺のwifiホットスポットの情報を取得します.
2.WifiConfiguration
Wifiネットワークの構成は、セキュリティ設定などが含まれており、wifiアクセスポイントを接続する際に取得する必要がある情報があります.主に4つの属性があります.
BSSID:
BSSは、有線ネットワークに接続された少なくとも1つのAPおよび複数の無線ワークステーションからなる特殊なAd−hoc LAN(ポイント・ツー・ポイント・アクセスをサポートする無線ネットワーク・アプリケーション・モード)のアプリケーションであり、この構成を基本サービス・デバイスと呼ぶ.コンピュータのグループは同じBSS名を設定し、グループを作成することができます.このBSS名、いわゆるBSSIDです.通常、携帯電話WLANでは、bssidは実は無線ルーティングのMACアドレスである.
Networkid:ネットワークID.
PreSharedKey:ワイヤレスネットワークのセキュリティ認証モード.
SSID:SSID(Service Set Identif)は、無線LANを識別するために使用され、SSIDの異なる無線ネットワークでは相互アクセスができません.
3.WifiInfo
wifi無線接続の記述は、(アクセスポイント、ネットワーク接続状態、非表示アクセスポイント、IPアドレス、接続速度、MACアドレス、ネットワークID、信号強度などの情報)を含む.WifiManagerでよく使われる方法を簡単に説明します.
getSSID()
SSID取得(ホットスポット名)
getBSSID()
BSSIDの取得
getDetailedStateOf()
クライアントの接続性の取得
getHiddenSSID()
SSIDを取得して非表示にするかどうか
getIpAddress()
IPアドレスの取得
getLinkSpeed()
接続速度の取得
getMacAddress()
Macアドレスの取得
getRssi()
802.11 nネットワークの信号を取得
4.WifiManager
wifi接続統合管理クラスは、WIFIカードの状態を取得する(WIFIカードの状態は一連の整形定数で表される)
WIFI_STATE_DISABLING = 0
WIFI NICがオフになっています
WIFI_STATE_DISABLED = 1
WIFIカードは使用できません
WIFI_STATE_ENABLING = 2
WIFIネットワークが開いています(WIFI起動に時間がかかります)
WIFI_STATE_ENABLED = 3
WIFI NICが利用可能
WIFI_STATE_UNKNOWN = 4
不明なNICステータス
WIFI_AP_STATE_DISABLING = 10
WIFIホットスポットがオフになっています
WIFI_AP_STATE_DISABLED = 11
WIFIホットスポットは使用できません
WIFI_AP_STATE_ENABLING = 12
WIFIホットスポットが開いています
WIFI_AP_STATE_ENABLED = 13
WIFIホットスポット利用可能
5.AndroidManifest.xmlによるWIFI操作の権限設定
<!--      wifi          -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

以下はwifi管理ツールクラスをまとめて、私は改善して、そして詳しい注釈を加えて、とても実用的です!
WifiAdminクラス:(wifi管理ツールクラス)
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("
");         }         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();     } }