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的更多相关文章

  1. Android 网络开发之WIFI

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...

  2. Android网络开发之用tcpdump抓包

    Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...

  3. Android网络开发之OkHttp--基本用法POST

    1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...

  4. Android网络开发之OkHttp--基本用法GET

    1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...

  5. Android网络开发之Volley--Volley自定义Request

    1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...

  6. Android网络开发之Volley--Volley基本用法ImageRequest(三)

    1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...

  7. Android网络开发之Volley--Volley基本用法JsonObjectReques(二)

    1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...

  8. Android网络开发之Volley--Volley基本用法StringRequest(一)

    1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...

  9. Android网络开发之HttpURLConnection

    http是一个可靠的传输,建立在TCP/IP连接之上,缺省端口是80,其他端口号也可以用.Android可以用HttpURLConnection或HttpClient接口来开发http程序. http ...

随机推荐

  1. 【postman】postman访问zuul路由网关,发生Could not get any response 的情况

    情况如下: zuul配置的自定义过滤器,对所有由zuul进行路由转发的请求进行安全验证,如果请求中包含auth,则成功路由,否则失败. 代码如下: package com.swapping.sprin ...

  2. C\C++各路高手以及操作系统专家请进来杀死这个进程

    通常情况下编写一个程序,能够点击关闭button正常结束程序,也能够使用任务管理器结束任务,还能够使用taskkill等命令杀死进程,实在都不行也能够直接重新启动计算机. 可是,这些方法真的都管用吗? ...

  3. Xcode插件管理器Alcatraz的使用

    Xcode插件管理器Alcatraz的使用 下载地址 https://github.com/alcatraz/Alcatraz 下载软件包 解压以及编译 重启Xode并Load Bundle 安装插件 ...

  4. [翻译] Working with NSURLSession: AFNetworking 2.0

    Working with NSURLSession: AFNetworking 2.0   简单翻译,有很多错误,看官无法理解处请英文原文对照. http://code.tutsplus.com/tu ...

  5. glassfish3 读不到web程序的jar包

    现在项目中用到glassfish3,部署了一个web程序.可以访问到首页,但是在登陆的时候提示找不到数据库的驱动包.这个jar包我是放在web-inf/lib下的.但是glassfish就是报找不到j ...

  6. 追MM和Java的23种设计模式

    我在Java论坛看到这篇文章,作者以轻松的语言比喻了java的32种模式,有很好的启发作用,但可惜没有给出具体的意思,我就在后边加上了.这些都是最简单的介绍,要学习的话建议你看一下阎宏博士的<J ...

  7. HBase性能调优(转)

    原文链接:http://www.blogjava.net/ivanwan/archive/2011/06/15/352350.html 因官方Book Performance Tuning部分章节没有 ...

  8. Visual Studio 2013键盘码农常用快捷键

    声明及广告 所有功能针对C#开发配置而写,面向人群是喜欢键盘操作而非鼠标操作的开发者.部分功能可能由插件提供,我会尽可能标注出相应的插件名称.为行文方便,所有快捷键以大写形式表示.太常用的快捷键,如C ...

  9. Partition List leetcode java

    题目: Given a linked list and a value x, partition it such that all nodes less than x come before node ...

  10. js实现trim() JS去掉首尾空格 JS去掉两头空格

    function trimStr(str){ return str.replace(/(^\s*)|(\s*$)/g,""); } 用的时候就是直接 var 变量=trimStr( ...