標籤:
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列表顯示