Android网络开发之WIFI
WIFI全称Wireless Fidelity, 又称802.11b标准。WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA), 2002年10月正式改名Wi-Fi Alliance。
Android 提供android.net.wifi 包。wifi api为app和底层无线栈进行交流提供途径。底层无线栈为wifi提供接入点。
android.net.wifi 中常用的类有:
1. ScanResult, 主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等。
2. WifiConfiguration, wifi网络配置,包括安全配置等。
3. WifiInfo, Wifi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等。
4. WifiManager, 提供管理wifi连接的大部分API。
5. WifiManager.WifiLock, 通过WifiLock来锁定wifi网络,使其一直保持连接,直到这个锁定被释放。如果app需要下载很大的文件,就需要保持wifi锁,来确保app有足够的时间下载完成。wifi锁不能超越wifi-enabled设置,也没有飞行模式。
WifiManager的常用方法
1. addNetwork
2. calculateSignalLevel,
3. compareSignalLevel,
4. createWifiLock,
5. disableNetwork,
6. disconnect,
7. enableNetwork,
8. getConfiguredNetworks,
9. getDhcpInfo,
10. getScanResults,
11. getWifiState,
12. isWifiEnabled,
13. pingSupplicant,
14. reassociate,
15. removeNetwork,
16. saveConfiguration,
17. setWifiEnabled,
18. startScan,
19. updateNetwork.
学习如何控制app中的wifi连接。
// 获得WifiManager对象
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
public class WifiAdmin {
private WifiManager mWifiManager;
private WifiInfo mWifiInfo;
private List<ScanResult> mWifiList;
private List<WifiConfiguration> mWifiConfigurations;
private WifiLock mWifiLock;
public WifiAdmin(Context context) {
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开wifi
if(!mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(true);
}
// 关闭wifi
if(mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(false);
}
// 锁定wifilock
if(!mWifiLock.isHeld()) {
mWifiLock.acquire();
}
// 解锁wifiLock
if(mWifiLock.isHeld()) {
mWifiLock.unAcquire();
}
// 创建一个wifiLock
mWifiLock = mWifiManager.createWifiLock(“xxx”);
// 扫描wifi网络
mWifiManager.startScan();
mWifiList = mWifiManager.getScanResults();
// 得到wifi连接
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
// 得到MAC地址
mWifiInfo.getMacAddress();
// 得到接入点的BSSID
mWifiInfo.getBSSID();
// 得到IP地址
mWifiInfo.getIpAddress();
// 得到连接的ID
mWifiInfo.getNetworkId();
// 得到WifiInfo所有信息
mWifiInfo.toString();
// 添加一个网络并连接
int wifiConfigId = mWifiManager.addNetwork(wifiConfig);
mWifiManager.enableNetwork(wifiConfigId, true);
// 断开指定网络
mWifiManager.disableNetwork(wifiConfigId);
mWifiManager.disconnect();
}
在AndroidManifest.xml文件中授权
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
<uses-permission android:name=”android.permission.ACCESS_CHECKIN_PROPERTIES”/>
<uses-permission android:name=”android.permission.WAKE_LOCK”/>
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.CHANGE_WIFI_STATE”/>
<uses-permission android:name=”android.permission.MODIFY_PHONE_STATE”/>
Android网络开发之WIFI的更多相关文章
- Android 网络开发之WIFI
WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...
- Android网络开发之用tcpdump抓包
Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...
- Android网络开发之OkHttp--基本用法POST
1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...
- Android网络开发之OkHttp--基本用法GET
1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...
- Android网络开发之Volley--Volley自定义Request
1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...
- Android网络开发之Volley--Volley基本用法ImageRequest(三)
1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...
- Android网络开发之Volley--Volley基本用法JsonObjectReques(二)
1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...
- Android网络开发之Volley--Volley基本用法StringRequest(一)
1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...
- Android网络开发之HttpURLConnection
http是一个可靠的传输,建立在TCP/IP连接之上,缺省端口是80,其他端口号也可以用.Android可以用HttpURLConnection或HttpClient接口来开发http程序. http ...
随机推荐
- SpreadSheet数据导出为DataTable z
devexpress也提供了一种将excel数据,而且可以指定区域进行转换,用起来相当灵活,本人将其解决方法分享如下(代码): private DataTable export(Wo ...
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...
- plsql调用无参/有参存储过程
--有参调用方式:declare STERMINAL ); SPROCESS NUMBER; begin sj_transfera_digi_getmapping(,,'DYH010006783031 ...
- synchronized与lock,哪个效率更高
Java在一开始就提供了synchronized关键字,用于多线程之间的同步.它使用简便,不会出现拿锁之后不归还的情况,可以避免一些编程错误. 而jdk5时提供的concurrent包里,有一个Loc ...
- 同步FIFO的设计
module scfifo #( , ) ( input clk, input rst_n, input wren, input rden, :] din, :] dout, output full, ...
- 使用SGD(Stochastic Gradient Descent)进行大规模机器学习
原贴地址:http://fuliang.iteye.com/blog/1482002 其它参考资料:http://en.wikipedia.org/wiki/Stochastic_gradient_ ...
- GPU/CUDA程序初体验 向量加法
现在主要的并行计算设备有两种发展趋势: (1)多核CPU. 双核,四核,八核,...,72核,...,可以使用OpenMP编译处理方案,就是指导编译器编译为多核并行执行. (2)多线程设备(GP)GP ...
- Cesium随笔(2)加载天地图地图服务【转】
Cesium自带的图层是bing地图和esri,mapbox等图层,木有中文注记,想加载中文注记的图层?废话不说,上代码: var viewer = new Cesium.Viewer('cesium ...
- NGUI诡异的drawCall
看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 好奇心下做了个demo,两个panel中只用到一个Atlas,却产生了10个draw ...
- 【Nodejs】使用put方式向后端查询数据并在页面显示
前端代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Ty ...