首页 编程 软件学院 查看内容

android wifi讲解 wifi列表显示

2013-10-29 10:45 902 0

摘要:   最近项目中用到了wifi模块,今天做一个简单的总结。1.怎样获取wifi对象并进行操作要操作WIFI设备,需要先获取Context.getSystemService(Context.WI...
关键词: nbsp wifi WifiManager 网络 ScanResult list ImageView 一个 setImageDrawable getResources

  最近项目中用到了wifi模块,今天做一个简单的总结。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内容如下:[html]  <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内容如下:[html] <?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的代码了,这里需要自己自定义列表。[java]  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;          }        }    }  程序运行效果图如下:
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部