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内容如下:
<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) > ) {
imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_0));
} else if (Math.abs(scanResult.level) > ) {
imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));
} else if (Math.abs(scanResult.level) > ) {
imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));
} else if (Math.abs(scanResult.level) > ) {
imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_2));
} else if (Math.abs(scanResult.level) > ) {
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列表显示的更多相关文章

  1. Android手机用wifi连接adb调试的方法

    https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...

  2. Android 开发 创建WiFi、WiFi热点 ---开发集合

    WIFI 权限 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> < ...

  3. S3c6410 平台 Android系统的Wi-Fi调试记录

    硬件平台:S3c6410 操作系统:Android 网卡芯片:GH381(SDIO接口 sdio8688) 1.SDIO驱动 因为是SDIO接口,所以请先保证mmc驱动(代码在“kernel\driv ...

  4. Android 中的WiFi剖析

    Android的WiFi 我们通常看到WiFi的守护进程wpa_supplicant在我们的ps的进程列表中,这个就是我们的wifi守护进程.wpa_supplicant在external/wpa_s ...

  5. 马上搞定Android平台的Wi-Fi Direct开发

    导语 移动互联网时代,很多用户趋向于将大量的资料保存在移动设备上.但在给用户带来便利的同时引发了一个新的问题——保存在移动设备上的资料该怎样共享出去?到了思考时间,普通青年这样想:折腾什么劲啊,直接用 ...

  6. Android 监听 WiFi 开关状态

    Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...

  7. Android教程:wifi热点问题

    http://www.linuxidc.com/Linux/2012-05/60718.htm 现在很多移动设备都提供wifi hostpot功能,使用方便,也省下了原来无线路由器的成本.wifi和w ...

  8. android学习-仿Wifi模块实现

    最近研究android内核-系统关键服务的启动解析,然而我也不知道研究wifi的作用,就当兴趣去做吧(其实是作业-_-) 系统原生WiFI功能大概有:启动WiFI服务,扫描WiFi信息(这个好像已经被 ...

  9. Android 7.1.1 又出幺蛾子了 —— 再谈 Android 上的 Wifi 连接

    在之前的博客文章中,我写了点在 Android 6 系统中连接到指定名称的 Wifi 的体验.然而,在 Android 7 中,有一些东西又变化了.另外就是在那篇文章中我说要提供代码,结果拖到这篇文章 ...

随机推荐

  1. document.execCommand()函数可用参数解析

    隐藏在暗处的方法-execCommand() 关键字: javascript document document.execCommand()方法可用来执行很多我们无法实现的操作. execComman ...

  2. CSS的display、hover、overflow、&copy(版权符号)、borer-radius(边框圆角)

    一.display: none 隐藏 block显示     visibility:hidden隐藏 visible显示 display:none和visibility:hidden这两个属性对应的值 ...

  3. Oracle表解锁

    网搜 --第一步 查看被锁表 select b.owner,b.object_name, b.object_id,l.session_id,l.locked_mode from v$locked_ob ...

  4. WPF自学笔记

    WPF使用哪几种元素作为顶级元素: 1. Window元素 2. Page元素(与Window元素类似,用于可导航的应用程序) 3. Application元素(定义应用程序资源和启动设置) PS:在 ...

  5. CSS: inline-block的应用和float块高度塌陷

    普通流高度塌陷: 当块float浮动时,不会对块布局产生影响,块仍然会按照左右或者上下的顺序排列.但是会影响文档的排列,当文档的高度超过块的高度时,块的高度会产生塌陷现象.   高度塌陷解决方法:   ...

  6. CheckBox控件实现选项的选中

    1:设置控件属性 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  7. F - 蜘蛛牌(深度搜索)

    Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...

  8. 【Linux命令】Ubuntu14.04+QT5.2配置mysql

    安装qt: 官网下载qt5.2.1:qt-opensource-linux-x64-5.2.1.run 直接命令行运行:./qt-opensource-linux-x64-5.2.1.run 选择安装 ...

  9. Python学习之路——模块

    一.模块: 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...

  10. 使用msys

    下载地址:http://msys2.github.io/ 更新:pacman -Syu 安装git:pacman -S git 或者使用cygwin 调色:编辑~/.minttyrc Foregrou ...