http://www.tutorialspoint.com/android/android_wi_fi.htm

Android allows applications to access to view the access the state of the wireless connections at very low level. Application can access almost all the information of a wifi connection.

The information that an application can access includes connected network's link speed,IP address, negotiation state(协商状态), other networks information. Applications can also scan, add, save, terminate and initiate Wi-Fi connections.

Android provides WifiManager API to manage all aspects(方面) of WIFI connectivity. We can instantiate this class by calling getSystemService method. Its syntax is given below −

WifiManager mainWifiObj;
mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);

In order to scan a list of wireless networks, you also need to register your BroadcastReceiver. It can be registered using registerReceiver method with argument of your receiver class object. Its syntax is given below −

lass WifiScanReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
}
}
WifiScanReceiver wifiReciever = new WifiScanReceiver();
registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

The wifi scan can be start by calling the startScan method of the WifiManager class. This method returns a list of ScanResult objects. You can access any object by calling the get method of list. Its syntax is given below −

List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
String data = wifiScanList.get(0).toString();

一般情况下网路环境不怎么变,尽量减少wifi扫描的次数,我自己写程序的时候发现每次扫描的时候要10秒左右才能完成。。。

另外,有的手机 WIFI断开的时候会触发WIFI scan。

下面是一个修改过的WIFI riceiver,利用handler传播消息

package com.example.longer3d.wifi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.util.Log; public class WifiStatusReceiver extends BroadcastReceiver { /**
* wifi连接成功
*/
public static final int WIFI_HANDLER_CONNECT_SUCCESS = 0x101;
/**
* wifi连接失败
*/
public static final int WIFI_HANDLER_CONNECT_FAILD = 0x102;
/**
* wifi连接失败,密码错误,但是只是偶尔会捕抓到=_=..
*/
public static final int WIFI_HANDLER_CONNECT_FAILD_AUTH = 0x103; private Handler handler; public WifiStatusReceiver(Handler handler) {
this.handler = handler;
} @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action) {
case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
//
// 查看源码SupplicantStateTracker.java
//
SupplicantState supl_state = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
if (supl_state == SupplicantState.COMPLETED) {
// 添加回调
handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_SUCCESS);
Log.e("SupplicantState", "wifi COMPLETED");
} else if (supl_state == SupplicantState.DISCONNECTED) {
handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD);
Log.e("SupplicantState", "wifi DISCONNECTED");
} else {
Log.e("SupplicantState", String.valueOf(supl_state));
Log.e("SupplicantState", "wifi Unknown");
} if (intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)) {
handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD_AUTH);
Log.e("SupplicantState", "WIFI验证失败!");
}
break; // wifi连接上与否
// 会调用的比较快,和多次,不知道为什么,先不使用
case WifiManager.NETWORK_STATE_CHANGED_ACTION:
// Log.e("receiver", "网络状态改变");
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
// handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD);
Log.e("receiver", "wifi网络连接断开");
} else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
// 获取当前wifi名称
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
Log.e("receiver", "连接到网络 " + wifiInfo.getSSID());
// 添加回调
// handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_SUCCESS);
}
break;
// wifi打开与否
case WifiManager.WIFI_STATE_CHANGED_ACTION:
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
if (wifiState == WifiManager.WIFI_STATE_DISABLED) {
Log.e("receiver", "系统关闭wifi");
} else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
Log.e("receiver", "系统开启wifi");
}
break;
}
}
}

搬-Android - Wi-Fi Tutorial[转]的更多相关文章

  1. Android SQLite Database Tutorial

    表名: 列(字段): 联系人实体类:构造方法,setters .getters方法 File:   Contact.java package com.example.sqlitetest; publi ...

  2. Android - JSON Parser Tutorial

    Android provides four different classes to manipulate JSON data. These classes are JSONArray,JSONObj ...

  3. android 的 ExpandableListView Example Tutorial

    https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...

  4. 【Android】 Android-wifi 直连 wifi direct wifi p2p

    现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的 ...

  5. 【转】获取android设备 id

    关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...

  6. Android设备的ID

    Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段. 范围 本 ...

  7. 如何检索Android设备的唯一ID

    关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...

  8. android intent收集转载汇总

    Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);                 ComponentName comp = ...

  9. Android 外部启动activity,自定义action,action常量大全

    从任意app,启动另外一个app的activity: 1.   Intent i = new Intent();           ComponentName cn = new ComponentN ...

随机推荐

  1. javaSE基础05

    javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...

  2. 多功能弹窗控件layer

    开发网站的时候,如何合理运用好各种插件对开发的帮助是很大的. 免去了我们调试各种交互效果, 比如常用的弹窗.气泡.提示.加载.焦点.标签.导航.折叠等等 这里会推荐几个常用的js插件,丰富多样简单易移 ...

  3. lnmp安装

    一.准备工作 需要的安装包都是从官网下载的,系统centos6.6 nginx-1.10.1.tar.gz php-5.6.24.tar.gz mysql-5.5.32.tar.gz 所有的包都一传入 ...

  4. tp框架的增删改查

    首先,我们来看一下tp框架里面的查询方法: 查询有很多种,代码如下: <?php namespace Admin\Controller; use Think\Controller; class ...

  5. MFC 创建XML

    void CreateXml() { CoInitialize(NULL); // 创建文档 MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL; //创建DOMDo ...

  6. 前端知识杂烩(HTML[5]?+CSS篇)

    1. CSS 优先级算法如何计算?2.如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?3.用纯CSS创建一个三角形的原理是什么?4. 如何解决inline-block元素的空白间距( ...

  7. 数据分析(9):DataFrame介绍

    DataFrame 表格型的数据结构 创建DataFrame 可以通过传入dict的方式,DataFrame会自动加上索引,并且列会有序排列 data = {'state':['a', 'b', 'c ...

  8. Spring MVC类型转换

    类型转换器引入 为什么页面上输入"12",可以赋值给Handler方法对应的参数?这是因为框架内部帮我们做了类型转换的工作.将String转换成int 但默认类型转换器并不是可以将 ...

  9. qtranslate

    qtranslate可以帮助用户快速的建立多语言网站平台,qTranslate 插件就是一个功能强大的 WordPress 多语言插件. 它允许用户在配置页添加新的语言.在 URL 结构方面,qTra ...

  10. 学习微信小程序之css8

    实战画一个圣诞树 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...