android之wifi開發(一)

來源:互聯網
上載者:User

 WIFI就是一種無線連網技術,常見的是使用無線路由器。那麼在這個無線路由器的訊號覆蓋的範圍內都可以採用WIFI串連的方式進行連網。如果無線路由器串連了一個ADSL線路或其他的連網線路,則又被稱為“熱點”。

在Android中對Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下幾個類和介面:

1.ScanResult

  主要用來描述已經檢測出的存取點,包括存取點的地址,存取點的名稱,身份認證,頻率,訊號強度等資訊。

2.WifiConfiguration

 Wifi網路的配置,包括安全設定等。

3.WifiInfo

 wifi無線串連的描述,包括存取點,網路連接狀態,隱藏的存取點,IP地址,連線速度,MAC地址,網路ID,訊號強度等資訊。這裡簡單介紹一下這裡的方法:

       getBSSID() 擷取BSSID

       getDetailedStateOf() 擷取用戶端的連通性

       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:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"     > <LinearLayout    android:orientation="vertical"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      >  <Button      android:id="@+id/scan"      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="掃描網路"      />  <Button      android:id="@+id/start"      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="開啟Wifi"      />  <Button      android:id="@+id/stop"      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="關閉Wifi"      />  <Button      android:id="@+id/check"      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="Wifi狀態"      />    <TextView      android:id="@+id/allNetWork"      android:layout_width="fill_parent"      android:layout_height="wrap_content"       android:text="當前沒有掃描到Wifi網路"      />      </LinearLayout></ScrollView>

接下來我們吧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();}//開啟wifipublic void openWifi(){if(!mWifiManager.isWifiEnabled()){mWifiManager.setWifiEnabled(true);}}//關閉wifipublic void closeWifi(){if(!mWifiManager.isWifiEnabled()){mWifiManager.setWifiEnabled(false);}} // 檢查當前wifi狀態      public int checkState() {          return mWifiManager.getWifiState();      }  //鎖定wifiLockpublic void acquireWifiLock(){mWifiLock.acquire();}//解鎖wifiLockpublic void releaseWifiLock(){//判斷是否鎖定if(mWifiLock.isHeld()){mWifiLock.acquire();}}//建立一個wifiLockpublic 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();}//得到串連的IDpublic 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{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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://關閉WifimWifiAdmin.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,具體參數參見上面介紹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.