近期博主在学frangment框架,因此想着想着就想通过listfragment完毕对wifi列表的获取。

好!

如今就不说废话了。

一.wifi的基础知识

Android的官方文档中定义了例如以下五种状态:

WIFI_STATE_DISABLING  WIFI网卡正在关闭  0

WIFI_STATE_DISABLED   WIFI网卡不可用  1
WIFI_STATE_ENABLING    WIFI网卡正在打开  2
WIFI_STATE_ENABLED     WIFI网卡可用  3
WIFI_STATE_UNKNOWN    WIFI网卡状态不可知 4

而要想获得wifi的信息,就须要一个wifimanager对象,而

wifimanager对象须要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象。

在这里我们须要知道activity这类事继承自Context的,因此能够MainActivity.this.getSystemService(Context.WIFI_SERVICE)来

获取对象。假设要想得到周围的WIFI热点列表,能够使用WifiManager.getScanResults()返回一个ScanResult列表

下面是从别的博主那转载的相关wifi基本知识

(1)ScanResult

主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。 在我们进行wifi 搜索的时候,通常会搜到这些信息,首先是接入点名字、接入点信息的强弱、还有接入点使用的安全模式。是WPA、WPE;打开这个类,我们能够看到下面几个信息 BSSID 接入点的地址,这里主要是指小范围几个无线设备相连接所获取的地址。比方说两台笔记本通过无线网卡进行连接,两方的无线网卡分配的地址。
SSID 网络的名字。当我们搜索一个网络时,就是靠这个来区分每个不同的网络接入点。
Capabilities 网络接入的性能,这里主要是来推断网络的加密方式等。
Frequency 频率,每个频道交互的MHz 数。

Level 等级。主要来推断网络连接的优先数。
这里仅仅提供了一个方法。就是将获得信息编程字符串toString()。

(2)wifiConfiguration

在我们连通一个wifi 接入点的时候。须要获取到的一些信息。

大家能够跟我们有线的设备进行对照一下。
这里的数据相对来说比較复杂一下。
六个子类
WifiConfiguration.AuthAlgorthm 用来推断加密方法。

WifiConfiguration.GroupCipher 获取使用GroupCipher 的方法来进行加密。
WifiConfiguration.KeyMgmt 获取使用KeyMgmt 进行。
WifiConfiguration.PairwiseCipher 获取使用WPA 方式的加密。
WifiConfiguration.Protocol 获取使用哪一种协议进行加密。

wifiConfiguration.Status 获取当前网络的状态。
对于上述加密感兴趣的朋友,能够在网上搜索相关的内容。

设置WifiConfiguration的属性:
WifiConfiguration.AuthAlgorthm 设置加密方法。
可选參数:LEAP仅仅用于leap,
OPEN 被wpa/wpa2须要,
SHARED须要一个静态的wep key
WifiConfiguration.GroupCipher 使用GroupCipher 的方法来进行加密。
可选參数:CCMP,TKIP,WEP104,WEP40
WifiConfiguration.KeyMgmt 键管理机制(keymanagerment)。使用KeyMgmt 进行。
可选參数IEEE8021X,NONE,WPA_EAP,WPA_PSK
WifiConfiguration.PairwiseCipher 设置加密方式。
可选參数 CCMP,NONE,TKIP
WifiConfiguration.Protocol 设置一种协议进行加密。

可选參数 RSN,WPA,
wifiConfiguration.Status 设置当前网络的状态。
可选參数CURRENT,DISABLED,ENABLED

(3)WifiInfo

在我们的wifi 已经连通了以后。能够通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息,
这里信息就比較简单了。这里简介一下这里的方法:
getBSSID() 获取BSSID
getDetailedStateOf() 获取client的连通性
getHiddenSSID() 获得SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获得连接的速度
getMacAddress() 获得Mac 地址
getRssi() 获得802.11n 网络的信号
getSSID() 获得SSID
getSupplicanState() 返回详细client状态的信息

(4)wifiManager

这个不用说,就是用来管理我们的wifi 连接。这里已经定义好了一些类,能够供我们使用。
这里来说相对复杂,里面的内容比較多,可是通过字面意思,我们还是能够获得非常多相关的信息。这个类里面预先定义了很多常量。我们能够直接使用,不用再次创建。
这里还是简介一下这里的方法:
addNetwork(WifiConfiguration config) 通过获取到的网络的链接状态信息,来加入网络
calculateSignalLevel(int rssi , int numLevels) 计算信号的等级
compareSignalLevel(int rssiA, int rssiB) 对照连接A 和连接B
createWifiLock(int lockType, String tag) 创建一个wifi 锁,锁定当前的wifi 连接
disableNetwork(int netId) 让一个网络连接失效
disconnect() 断开连接
enableNetwork(int netId, Boolean disableOthers) 连接一个连接
getConfiguredNetworks() 获取网络连接的状态
getConnectionInfo() 获取当前连接的信息
getDhcpInfo() 获取DHCP 的信息
getScanResulats() 获取扫描測试的结果
getWifiState() 获取一个wifi 接入点是否有效
isWifiEnabled() 推断一个wifi 连接是否有效
pingSupplicant() ping 一个连接。推断能否连通
ressociate() 即便连接没有准备好,也要连通
reconnect() 假设连接准备好了,连通
removeNetwork() 移除某一个网络
saveConfiguration() 保留一个配置信息
setWifiEnabled() 让一个连接有效
startScan() 開始扫描
updateNetwork(WifiConfiguration config) 更新一个网络连接的信息
此外wifiManaer 还提供了一个内部的子类,也就是wifiManagerLock,WifiManagerLock 的作用是这种,
在普通的状态下,假设我们的wifi 的状态处于闲置。那么网络的连通,将会临时中断。

可是假设我们把当前的网络状态锁上,那么wifi 连通将会保持在一定状态。当然接触锁定之后。就会恢复常态

好了。废话不多说了,下面我就来贴代码图吧。


mainfest的代码图

<?xml version="1.0" encoding="utf-8"?

>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wifilisttest"
android:versionCode="1"
android:versionName="1.0" > <!-- 下面是使用wifi訪问网络所需的权限 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" /> <application
android:allowBackup="true"
android:icon="@drawable/kkk99"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

mainactivity

package com.example.wifilisttest;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends FragmentActivity {
private WifiManager wifiManager;
List<ScanResult> list;
String[] Flist=null;
Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment1 f1 = new Fragment1();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.fragments, f1).commit(); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

Fragment1

package com.example.wifilisttest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast; /**
* @描写叙述 在Fragment中要使用ListView。就要用ListFragment
* */
public class Fragment1 extends ListFragment { private String TAG = Fragment1.class.getName();
private ListView list ;
private SimpleAdapter adapter;
List<ScanResult> llll=null;
String[] Flist;
private TextView Tv;
private WifiManager wifiManager;
List<ScanResult> listb;
/**
* @描写叙述 在onCreateView中载入布局
* */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container,false);
list = (ListView) view.findViewById(android.R.id.list);
Tv=(TextView)view.findViewById(R.id.tv);
Tv.setText("nullTitle"); Log.i(TAG, "--------onCreateView");
return view;
} @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); Bundle b = savedInstanceState;
Log.i(TAG, "--------onCreate");
wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
listb = wifiManager.getScanResults();
//数组初始化要注意
String[] listk=new String[listb.size()];
if(listb!=null){
for( int i=0;i<listb.size();i++){
ScanResult scanResult = listb.get(i);
listk[i]=scanResult.SSID;
}
} String[] list0=new String[listb.size()];
if(listb==null){list0[0]="NoWiFi";}
else{
list0=listk;
}
//设置Fragment1相应R.layout.listtest这个布局文件
adapter = new SimpleAdapter(getActivity(), getData(list0), R.layout.listtest, new String[]{"title"}, new int[]{R.id.title});
setListAdapter(adapter); } @Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
ScanResult scanResult = listb.get(position);
if(wifiManager.setWifiEnabled(true))
{
Toast.makeText(getActivity(),scanResult.SSID+position , Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getActivity(),"wifi没打开" , Toast.LENGTH_LONG).show();
}
System.out.println(l.getChildAt(position));
HashMap<String, Object> view= (HashMap<String, Object>) l.getItemAtPosition(position);
System.out.println(view.get("title").toString()+"+++++++++title"); Toast.makeText(getActivity(), TAG+l.getItemIdAtPosition(position), Toast.LENGTH_LONG).show();
System.out.println(v); System.out.println(position); } private List<? extends Map<String, ? >> getData(String[] strs) {
List<Map<String ,Object>> list = new ArrayList<Map<String,Object>>(); for (int i = 0; i < strs.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", strs[i]);
list.add(map); } return list;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i(TAG, "--------onActivityCreated"); } @Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.i(TAG, "----------onAttach");
} }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/fragments"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></FrameLayout> </LinearLayout>

fragment1.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"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center" /> <ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView> </LinearLayout>

listtest.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"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> </LinearLayout>

效果图

代码下载

android开发-获取wifi列表的更多相关文章

  1. android开发获取网络状态,wifi,wap,2g,3g.工具类(一)

    android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...

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

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

  3. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃

    一:业务描述 最近公司有一个小需求,用户点击wifi扫描按钮(注意:是用户主动点击wifi扫描按钮),app去扫描附近的wifi,显示在listView中,仅此而已,app都不用去连接某个wifi,看 ...

  4. android程序获取WIFI的IP地址和MAC地址

    转自:http://my.oschina.net/chenj/blog/68680 近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问 <Button android:id=& ...

  5. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  6. Android 开发 获取Android设备的屏幕高宽

    获得屏幕的宽度和高度有很多种方法: //1.通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); heigth = dm.height ...

  7. Android开发 ExpandableListView 可折叠列表详解

    前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...

  8. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...

  9. Android开发之权限列表

    权限定义 功能 android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问"properties"表在checkin数据库中,改值可以修 ...

随机推荐

  1. 值得学习的CSS知识

    这里零度给大家推荐几个值得学习的CSS技巧,能让你编写网页事半功倍!一.清除默认值 通常 padding 的默认值为 0,background-color 的默认值是 transparent.但是在不 ...

  2. DG动态性能视图详解

    V$LOG 显示CONTROLFILE记录的LOG FILE信息. 列名          描述 GROUP#        日志组号 THREAD#       日志线程号 SEQUENCE#    ...

  3. linux网络防火墙-iptables基础详解

    一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙 ...

  4. WPF 入门《数据绑定》

    简单而言, 数据绑定是一种关系, 这种关系告诉WPF 从一个源目标对象中提取一些信息, 并且使用该信息设置为目标对象的属性.目标属性总是依赖项属性, 并且通常位于WPF元素中. 然而, 源对象可以是任 ...

  5. method initializationerror not found:JUnit4单元測试报错问题

           今天使用JUnit 4进行单元測试时,測试程序一直执行不起来,报method initializationerror not found错误.例如以下:            网上说版本 ...

  6. 【iOS开发-29】解决方式:TabBar的图片不显示,仅仅显示灰色的正方形

    (1)现象 tabbar上的图片变成一块正方形的灰色块块,原先的图片没有了. (2)原因 tabbar上的图片本质上不是一个图片.而是一个形状图片.系统对我们使用的图片也仅仅是把当中的形状" ...

  7. Google 免费公共 DNS 服务器

    Google 免费公共 DNS 服务器 http://googleblog.blogspot.com/2009/12/introducing-google-public-dns.html DNS 8. ...

  8. Android学习笔记进阶十之Matrix错切变换

    刚开始我也不懂啥叫错切变换,一看效果图你就恍然大悟. 对图像的错切变换做个总结: x = x0 + b*y0; y = d*x0 + y0; 与之对应的方法是: Matrix matrix = new ...

  9. Font Awesome 图标如何使用

    Font Awesome 图标如何使用 一.总结 一句话总结:Font Awesome字体图标非常好用,直接引入font-awesome.css,然后就可以直接使用了,使用的时候是用的i标签. 1.字 ...

  10. HTML基础第九讲---表单

    转自:https://i.cnblogs.com/posts?categoryid=1121494 最基本的留言版应该大家都用过吧!没错这就是一个表单运用很好的例子.表单提供了一个管道让读者发表心声, ...