android wifi講解 wifi列表顯示

來源:互聯網
上載者:User

標籤:

1.怎樣擷取wifi對象並進行操作要操作WIFI裝置,需要先擷取Context.getSystemService(Context.WIFI_SERVICE)來擷取WifiManager對象,並通過這個對象來管理WIFI裝置。addNetwork(WifiConfiguration config) 添加一個config描述的WIFI網路,預設情況下,這個WIFI網路是DISABLE狀態的。calculateSignalLevel(int rssi , int numLevels) 計算訊號的等級compareSignalLevel(int rssiA, int rssiB) 對比網路A和網路B的訊號強度createWifiLock(int lockType, String tag) 建立一個WIFI 鎖,鎖定當前的WIFI串連disableNetwork(int netId) 讓一個網路連接失效disconnect() 斷開當前的WIFI串連enableNetwork(int netId, Boolean disableOthers) 串連netId所指的WIFI網路,並是其他的網路都被禁用getConfiguredNetworks() 擷取網路連接的狀態getConnectionInfo() 擷取當前串連的資訊getDhcpInfo() 擷取DHCP 的資訊getScanResulats() 擷取掃描測試的結果getWifiState() 擷取當前WIFI裝置的狀態isWifiEnabled() 判斷WIFI裝置是否開啟pingSupplicant() ping操作,和PC的ping操作相同作用ressociate() 重新串連WIFI網路,即使該網路是已經被串連上的reconnect() 重新串連一個未串連上的WIFI網路removeNetwork() 移除某一個網路saveConfiguration() 保留一個配置資訊setWifiEnabled() 讓一個串連有效startScan() 開始掃描updateNetwork(WifiConfiguration config) 更新一個網路連接2.常用的wifi狀態WIFI_STATE_DISABLED WIFI網卡不可用 WIFI_STATE_DISABLING WIFI網卡正在關閉 WIFI_STATE_ENABLED WIFI網卡可用 WIFI_STATE_ENABLING WIFI網卡正在開啟 WIFI_STATE_UNKNOWN WIFI網卡狀態不可知3.列表查看有串連訊號的wifi熱點ScanResult對象就是用來表示附近wifi熱點的屬性的,可以通過WifiManager.getScanResults()返回一個ScanResult列表,後面我附上查看附近wifi熱點的demo,ScanResult的重要屬性有一下幾個:BSSID 存取點的地址SSID 網路的名字,唯一區別WIFI網路的名字Capabilities 網路接入的效能Frequency 當前WIFI裝置附近熱點的頻率(MHz)Level 所發現的WIFI網路訊號強度4.串連wifi熱點通過WifiManager.getConfiguredNetworks()方法會返回WifiConfiguration對象的列表,然後再調用WifiManager.enableNetwork();方法就可以串連上指定的熱點。5.查看已經串連上的wifi資訊WifiInfo是專門用來表示串連的對象,這個對象可以通過WifiManager.getConnectionInfo()來擷取。WifiInfo中包含了當前串連中的相關資訊。 getBSSID() 擷取BSSID屬性getDetailedStateOf() 擷取用戶端的連通性getHiddenSSID() 擷取SSID 是否被隱藏getIpAddress() 擷取IP 位址getLinkSpeed() 擷取串連的速度getMacAddress() 擷取Mac 地址getRssi() 擷取802.11n 網路的訊號getSSID() 擷取SSIDgetSupplicanState() 擷取具體用戶端狀態的資訊在wifi操作中常用的類和方法就這些,下面給出一個列表顯示wifi熱點的demo。1.activity的布局很簡單就是一個ListView,activity_wifi_list.xml內容如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:paddingBottom="@dimen/activity_vertical_margin"      android:paddingLeft="@dimen/activity_horizontal_margin"      android:paddingRight="@dimen/activity_horizontal_margin"      android:paddingTop="@dimen/activity_vertical_margin"      tools:context=".WifiListActivity" >        <ListView          android:id="@+id/listView"          android:layout_width="match_parent"          android:layout_height="wrap_content" >      </ListView>    </RelativeLayout>  

2.ListView的item布局檔案item_wifi_list.xml內容如下:

<?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent" >        <ImageView          android:id="@+id/imageView"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_alignParentLeft="true"          android:layout_alignParentTop="true"          android:src="@drawable/ic_launcher" />        <TextView          android:id="@+id/textView"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_alignBottom="@+id/imageView"          android:layout_marginBottom="14dp"          android:layout_toRightOf="@+id/imageView"          android:text="TextView" />        <TextView          android:id="@+id/signal_strenth"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_alignBaseline="@+id/textView"          android:layout_alignBottom="@+id/textView"          android:layout_alignParentRight="true"          android:text="TextView" />    </RelativeLayout>  

3.下面就activity的代碼了,這裡需要自己自訂欄表

public class WifiListActivity extends Activity {        private WifiManager wifiManager;      List<ScanResult> list;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_wifi_list);          init();      }        private void init() {          wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);          openWifi();          list = wifiManager.getScanResults();          ListView listView = (ListView) findViewById(R.id.listView);          if (list == null) {              Toast.makeText(this, "wifi未開啟!", Toast.LENGTH_LONG).show();          }else {              listView.setAdapter(new MyAdapter(this,list));          }                }            /**      *  開啟WIFI      */      private void openWifi() {         if (!wifiManager.isWifiEnabled()) {          wifiManager.setWifiEnabled(true);         }              }        public class MyAdapter extends BaseAdapter {            LayoutInflater inflater;          List<ScanResult> list;          public MyAdapter(Context context, List<ScanResult> list) {              // TODO Auto-generated constructor stub              this.inflater = LayoutInflater.from(context);              this.list = list;          }            @Override          public int getCount() {              // TODO Auto-generated method stub              return list.size();          }            @Override          public Object getItem(int position) {              // TODO Auto-generated method stub              return position;          }            @Override          public long getItemId(int position) {              // TODO Auto-generated method stub              return position;          }            @Override          public View getView(int position, View convertView, ViewGroup parent) {              // TODO Auto-generated method stub              View view = null;              view = inflater.inflate(R.layout.item_wifi_list, null);              ScanResult scanResult = list.get(position);              TextView textView = (TextView) view.findViewById(R.id.textView);              textView.setText(scanResult.SSID);              TextView signalStrenth = (TextView) view.findViewById(R.id.signal_strenth);              signalStrenth.setText(String.valueOf(Math.abs(scanResult.level)));              ImageView imageView = (ImageView) view.findViewById(R.id.imageView);              //判斷訊號強度,顯示對應的指示表徵圖              if (Math.abs(scanResult.level) > 100) {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_0));              } else if (Math.abs(scanResult.level) > 80) {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));              } else if (Math.abs(scanResult.level) > 70) {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));              } else if (Math.abs(scanResult.level) > 60) {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_2));              } else if (Math.abs(scanResult.level) > 50) {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_3));              } else {                  imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_4));              }              return view;          }        }    }  

程式運行如下:

 

android wifi講解 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.