WIFI就是一種無線聯網技術,常見的是使用無線路由器。那麼在這個無線路由器的信號覆蓋的範圍內均可以採用WIFI鏈接的方式進行聯網。若是無線路由器鏈接了一個ADSL線路或其餘的聯網線路,則又被稱爲「熱點」。html
在Android中對Wifi操做,android自己提供了一些有用的包,在android.net.wifi包下面。主要包括如下幾個類和接口:java
1.ScanResultandroid
主要用來描述已經檢測出的接入點,包括接入點的地址,接入點的名稱,身份認證,頻率,信號強度等信息。安全
2.WifiConfiguration網絡
Wifi網絡的配置,包括安全設置等。app
3.WifiInfoide
wifi無線鏈接的描述,包括接入點,網絡鏈接狀態,隱藏的接入點,IP地址,鏈接速度,MAC地址,網絡ID,信號強度等信息。這裏簡單介紹一下這裏的方法:ui
getBSSID() 獲取BSSIDthis
getDetailedStateOf() 獲取客戶端的連通性spa
getHiddenSSID() 得到SSID 是否被隱藏
getIpAddress() 獲取IP 地址
getLinkSpeed() 得到鏈接的速度
getMacAddress() 得到Mac 地址
getRssi() 得到802.11n 網絡的信號
getSSID() 得到SSID
getSupplicanState() 返回具體客戶端狀態的信息
4.WifiManager
這個不用說,就是用來管理咱們的wifi 鏈接,這裏已經定義好了一些類,能夠供咱們使用。
獲取WIFI網卡的狀態
WIFI網卡的狀態是由一系列的整形常量來表示的。
1.WIFI_STATE_DISABLED : WIFI網卡不可用(1)
2.WIFI_STATE_DISABLING : WIFI網卡正在關閉(0)
3.WIFI_STATE_ENABLED : WIFI網卡可用(3)
4.WIFI_STATE_ENABLING : WIFI網正在打開(2) (WIFI啓動須要一段時間)
5.WIFI_STATE_UNKNOWN : 未知網卡狀態
下面先寫一個wifi的實例:
首先看如下main.xml:
接下來咱們吧wifi的相關操做都封裝在了一個WifiAdmin類中,之後開啓或關閉等相關操做能夠直接調用這個類的相關方法:
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; public class WifiAdmin { //定義一個WifiManager對象 private WifiManager mWifiManager; //定義一個WifiInfo對象 private WifiInfo mWifiInfo; //掃描出的網絡鏈接列表 private List<ScanResult> mWifiList; //網絡鏈接列表 private List<WifiConfiguration> mWifiConfigurations; WifiLock mWifiLock; public WifiAdmin(Context context){ //取得WifiManager對象 mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE); //取得WifiInfo對象 mWifiInfo=mWifiManager.getConnectionInfo(); } //打開wifi public void openWifi(){ if(!mWifiManager.isWifiEnabled()){ mWifiManager.setWifiEnabled(true); } } //關閉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<WifiConfiguration> getConfiguration(){ return mWifiConfigurations; } //指定配置好的網絡進行鏈接 public void connetionConfiguration(int index){ if(index>mWifiConfigurations.size()){ return ; } //鏈接配置好指定ID的網絡 mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true); } public void startScan(){ mWifiManager.startScan(); //獲得掃描結果 mWifiList=mWifiManager.getScanResults(); //獲得配置好的網絡鏈接 mWifiConfigurations=mWifiManager.getConfiguredNetworks(); } //獲得網絡列表 public List<ScanResult> 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 int getNetWordId(){ return (mWifiInfo==null)?0:mWifiInfo.getNetworkId(); } //獲得wifiInfo的全部信息 public String getWifiInfo(){ return (mWifiInfo==null)?"NULL":mWifiInfo.toString(); } //添加一個網絡並鏈接 public void addNetWork(WifiConfiguration configuration){ int wcgId=mWifiManager.addNetwork(configuration); mWifiManager.enableNetwork(wcgId, true); } //斷開指定ID的網絡 public void disConnectionWifi(int netId){ mWifiManager.disableNetwork(netId); mWifiManager.disconnect(); } }
最後看如下WifiActivity類:
import java.util.List; import android.app.Activity; import android.net.wifi.ScanResult; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class WifiActivity extends Activity { /** Called when the activity is first created. */ private TextView allNetWork; private Button scan; private Button start; private Button stop; private Button check; private WifiAdmin mWifiAdmin; // 掃描結果列表 private List<ScanResult> list; private ScanResult mScanResult; private StringBuffer sb=new StringBuffer(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWifiAdmin = new WifiAdmin(WifiActivity.this); init(); } public void init(){ allNetWork = (TextView) findViewById(R.id.allNetWork); scan = (Button) findViewById(R.id.scan); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); check = (Button) findViewById(R.id.check); scan.setOnClickListener(new MyListener()); start.setOnClickListener(new MyListener()); stop.setOnClickListener(new MyListener()); check.setOnClickListener(new MyListener()); } private class MyListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.scan://掃描網絡 getAllNetWorkList(); break; case R.id.start://打開Wifi mWifiAdmin.openWifi(); Toast.makeText(WifiActivity.this, "當前wifi狀態爲:"+mWifiAdmin.checkState(), 1).show(); break; case R.id.stop://關閉Wifi mWifiAdmin.closeWifi(); Toast.makeText(WifiActivity.this, "當前wifi狀態爲:"+mWifiAdmin.checkState(), 1).show(); break; case R.id.check://Wifi狀態 Toast.makeText(WifiActivity.this, "當前wifi狀態爲:"+mWifiAdmin.checkState(), 1).show(); break; default: break; } } } public void getAllNetWorkList(){ // 每次點擊掃描以前清空上一次的掃描結果 if(sb!=null){ sb=new StringBuffer(); } //開始掃描網絡 mWifiAdmin.startScan(); list=mWifiAdmin.getWifiList(); if(list!=null){ for(int i=0;i<list.size();i++){ //獲得掃描結果 mScanResult=list.get(i); sb=sb.append(mScanResult.BSSID+" ").append(mScanResult.SSID+" ") .append(mScanResult.capabilities+" ").append(mScanResult.frequency+" ") .append(mScanResult.level+"\n\n"); } allNetWork.setText("掃描到的wifi網絡:\n"+sb.toString()); } } }
不要忘了加入權限:
<!-- 如下是使用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:
狀態爲3說明WIFI網卡可用(3)。點擊掃描網絡:
這些就是掃描到的wifi,具體參數參見上面介紹。.