搬-Android - Wi-Fi Tutorial[转]
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[转]的更多相关文章
- Android SQLite Database Tutorial
表名: 列(字段): 联系人实体类:构造方法,setters .getters方法 File: Contact.java package com.example.sqlitetest; publi ...
- Android - JSON Parser Tutorial
Android provides four different classes to manipulate JSON data. These classes are JSONArray,JSONObj ...
- android 的 ExpandableListView Example Tutorial
https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...
- 【Android】 Android-wifi 直连 wifi direct wifi p2p
现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的 ...
- 【转】获取android设备 id
关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...
- Android设备的ID
Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段. 范围 本 ...
- 如何检索Android设备的唯一ID
关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...
- android intent收集转载汇总
Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); ComponentName comp = ...
- Android 外部启动activity,自定义action,action常量大全
从任意app,启动另外一个app的activity: 1. Intent i = new Intent(); ComponentName cn = new ComponentN ...
随机推荐
- 切换debian8系统语言环境
想切换操作系统的默认语言环境,可以使用如下命令,而不用重新安装系统: 查看操作系统的语言: # env | grep LANG 使用root导入要使用的系统语言: # export LANG=en_U ...
- Mac 下locate命令使用问题WARNING: The locate database (/var/db/locate.database) does not exist.
想在Mac下使用locate时,提醒数据库没创建: WARNING: The locate database (/var/db/locate.database) does not exist. To ...
- excel转json工具的制作(C#语言)
最近在做一个火炬之光的技能系统的demo,需要用到配置表工具. &在网上没有找到让自己满意的工具&自己感兴趣, so自己做了一个. 我使用的C#语言,用了网上的SimpleJSON工具 ...
- opencv2.4更换为opencv3.1后,mxnet编译错误(libpng16.so.16)
编译显示错误为: /usr/bin/ld: warning: libpng16.so.16, needed by /usr/local/lib/libopencv_imgcodecs.so, not ...
- ubuntu 14.04下spark简易安装
java安装 首先需要上oracle的网站下载 在lib目录下建立一个jvm文件夹 sudo mkdir /usr/lib/jvm 然后解压文件到这个文件夹 sudo tar zxvf jdk-8u4 ...
- CentOS Linux服务器安全设置
转自:http://www.osyunwei.com/archives/754.html 引言: 我们必须明白:最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关 ...
- 激光打印机的Color/paper, Xerography介绍
Color Basic 看见色彩三要素: 光源,物体,视觉 加色色彩模型:R,G,B 多用于显示器 减色色彩模型:C,M,Y,K 多用于打印复印 Paper 东亚地区常用A系列标准用纸,在多功能一体机 ...
- string,stringbuilder,stringbuffer用法
总结:1.如果要操作少量的数据用 = String ==================================>字符串常量2.单线程操作字符串缓冲区 下操作大量数据 = Strin ...
- SpringMVC(六) RequestMapping 路径中ant风格的通配符
SpringMVC支持路径中包含ant风格的通配符,常用的几种通配符及意义如下: ? 任意一个字符 * 任意多个字符 ** 匹配多层路径 测试控制器代码: package com.tiekui.spr ...
- C#区分多态和重载-delphi也类似
Delphi也是基于继承和接口的多态性.