android wifi讲解 wifi列表显示

转载 2013年12月05日 16:27:31

转自:http://www.2cto.com/kf/201310/253617.html


最近项目中用到了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() 获取SSID
getSupplicanState() 获取具体客户端状态的信息
在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;  
        }  
  
    }  
  
}  
程序运行效果图如下:

android wifi讲解 wifi列表显示

最近项目中用到了wifi模块,今天做一个简单的总结。 1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SE...
  • caoshichao520326
  • caoshichao520326
  • 2013年10月28日 16:11
  • 7882

Android M 开发中wifi列表显示问题的实践

公司在开发一个读取wifi列表的应用功能时,遇到了兼容性问题,由于之前一直是在Android4.0到Android 5.0之间开发,遇到Android M(6.0)的时候,还真是有点郁闷。言归正传...
  • oYuanYuJian
  • oYuanYuJian
  • 2016年07月13日 16:08
  • 691

wifi客户端列表

Broadcom proprietary: wl assoclist + wl sta_info macaddr Atheros proprietary: wlaconfig ath0 list s...
  • xiaoxiaozhu2010
  • xiaoxiaozhu2010
  • 2014年04月23日 15:34
  • 1110

Androin学习笔记二十三:wifi讲解 wifi列表显示

1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并...
  • wuhenyouyuyouyu
  • wuhenyouyuyouyu
  • 2016年05月18日 13:59
  • 387

android_wifi读书笔记之4-HAL层分析

本文为读书笔记,整理自网络文献和源码 4 HAL层分析 Hardware/libhardware_legacy/wifi/wifi.c 这个文件主要是实现驱动的加载和卸载,wpa_supplic...
  • joqian
  • joqian
  • 2014年05月27日 13:32
  • 1614

Wifi列表中文乱码

同事拿了块海思平台的板子过来,说是Wifi列表中文显示乱码,让我帮忙分析下原因。然后自己查看了下/data/misc/wifi目录: 查看了一下wpa_supplicant.conf文件,如下图, ...
  • ForeverSunshine
  • ForeverSunshine
  • 2016年03月09日 19:38
  • 3113

Google ZXing系列讲解(二)——生成WIFi二维码

本文首发简书: http://www.jianshu.com/p/656d6f6f862e前言本篇,重点不在技术细节,而是由我遇到的情况,脑洞了一下下,其中值得思考的问题点,还不少。且听听我的吐槽!吐...
  • shrimpcolo
  • shrimpcolo
  • 2017年02月22日 18:34
  • 1568

Miko Android自学之路 WifiDirect中文最强详解,如何传输数据,如何设置GroupOwener,如何设置客户端以及服务器端

大家好我是Miko,最近有参加一个比赛,用到了WifiDirect技术,于是翻看官方文档之后,想写一个Demo,Google API Sample已经很老了,还是用的Eclipse,宝宝心好累=_=+...
  • MikoGodZd
  • MikoGodZd
  • 2016年03月23日 17:44
  • 6623

Wifi模块解析和启动流程

http://blog.csdn.net/ylyuanlu/article/details/7711433 模块解析和启动流程 WIFI整体框架如图所示: 首先,用户程序使用WifiManage...
  • taiyuanwuyin
  • taiyuanwuyin
  • 2017年10月24日 16:45
  • 178

iwpriv 配置 WiFi 的使用实例

Examplesa> Config STA to link with AP which is OPEN/NONE(Authentication/Encryption)1. iwpriv ra0 set...
  • QQ1452008
  • QQ1452008
  • 2017年06月26日 18:48
  • 410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android wifi讲解 wifi列表显示
举报原因:
原因补充:

(最多只允许输入30个字)