最近在做Android 连接 Wifi 打印机的功能,无意间看到这个列表功能,比较简单,就实现了一下,没有DEMO。
其实主要的就是使用 WifiManager 这个对象来进行操作。
WifiManager 对应的 API 地址:http://www.apihome.cn/api/android/WifiManager.html
WifiInfo 对应的 API 地址:http://www.apihome.cn/api/android/WifiInfo.html
实现很简单,添加一个页面 :activity_wifilist.xml
<ListView android:id="@+id/lst_wifi" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true"> </ListView>
再添加一个 item : item_wifi_list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/txt_ssid" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="6" /> <TextView android:id="@+id/txt_rssi" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout>
页面搞定之后,新建一个Activity : MainActivity 随便搞的也就没有太过去注意命名
MainActivity :
public class MainActivity extends Activity { ListView lst_wifi; List<ScanResult> mlist_wifi; @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); init(); getWifiInfo(); super.onCreate(savedInstanceState); } private void init() { // TODO Auto-generated method stub lst_wifi = (ListView) findViewById(R.id.lst_wifi); } /** * * @Description:获取WIFI INFO * @Title: MainActivity.java * @author: Gift * @date 2015年5月15日下午4:54:11 * @return void */ private void getWifiInfo() { WifiManager mWifiManager = (WifiManager) this .getSystemService(Context.WIFI_SERVICE); if (!mWifiManager.isWifiEnabled()) { System.out.println("No WiFi connection------->> Enabled"); mWifiManager.setWifiEnabled(true); } mlist_wifi = mWifiManager.getScanResults(); lst_wifi.setAdapter(new WifiListAdapter(this, mlist_wifi)); /** * 这一块不关wifi列表的事,只是顺便获取出来而已 **/ WifiInfo mWifiInfo = mWifiManager.getConnectionInfo(); System.out.println("ipAddress-->>" + intIpToStrIp(mWifiInfo.getIpAddress()));// 原本是自己转换的 DhcpInfo mDhcpInfo = mWifiManager.getDhcpInfo(); System.out.println("serverAddress-->>" + android.text.format.Formatter .formatIpAddress(mDhcpInfo.serverAddress));// 后来发现工具包里面有提供方法 } /** * * @Description:转换ip地址 * @Title: MainActivity.java * @author: Gift * @date 2015年5月15日下午4:49:51 * @param ipAddress * @return * @return String */ private String intIpToStrIp(int ipAddress) { return ((ipAddress & 0xff) + "." + (ipAddress >> 8 & 0xff) + "." + (ipAddress >> 16 & 0xff) + "." + (ipAddress >> 24 & 0xff)); } public class WifiListAdapter extends BaseAdapter { LayoutInflater mLayoutInflater; List<ScanResult> mlist_wifi; public WifiListAdapter(Context context, List<ScanResult> mlist_wifi) { // TODO Auto-generated constructor stub this.mLayoutInflater = LayoutInflater.from(context); this.mlist_wifi = mlist_wifi; } @Override public int getCount() { // TODO Auto-generated method stub return mlist_wifi.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 mView = null; mView = mLayoutInflater.inflate(R.layout.item_wifi_list, null); ScanResult mScanResult = mlist_wifi.get(position); TextView txt_ssid = (TextView) mView.findViewById(R.id.txt_ssid); TextView txt_rssi = (TextView) mView.findViewById(R.id.txt_rssi); txt_ssid.setText(mScanResult.SSID); txt_rssi.setText(String.valueOf(Math.abs(mScanResult.level))); return mView; } } }
就这么简单,一个 WIFI 列表功能就实现了...