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. 纯文本抽出程序库DMC TEXT FILTER

    因需而生,红樱枫为文本转换市场领航 --纯文本抽出程序库DMC TEXT FILTER,从需求中把握平衡 在高度数字化的今天,数字图书馆已经成为非常多人查询资料的有效途径.然而即使在畅通的宽带搜寻中一 ...

  2. SCRUM黑

    来自 :coolshell 这篇文章的原文在这里(原文链接)(下文不是全译,也不是部分译,我只是把其总结,有我自己的发挥,但是原意大致不变),这篇文章完全是在调侃Scrum的,作者第一段就是一个免费声 ...

  3. html 中怎么设置div的位置

    利用CSS的position属性对元素定位,以下是position 属性规定元素的定位类型. absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位.元素的位置通过 ...

  4. linux 监控CPU 内存情况

    htop

  5. html嵌套iframe怎样实现等iframe页面载入完进行下一步调用

    </pre>假设想在你的html里面显示一张图片.或者显示一个报表,常常会在里面嵌套iframe,当我们点查询报表时.在报表显示过程中,我们想做个遮罩层,提示等待...可是报表显示出来后. ...

  6. 在Java程序中使用Hibernate

    Hibernate是一种ORM框架,ORM全称为Object-Relative Database-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象(一般为实体类) ...

  7. [13] 弧面(Arc)图形的生成算法

    顶点数据的生成 bool YfBuildArcVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, Yuint stac ...

  8. jquery选择器用法笔记(第二部分)

    今天继续讲讲jquery选择器的更多用法,希望能给大家带来帮助. 9.$("ul li:eq(3)")  --  列表中的第四个元素(index 从 0 开始) :eq() 选择器 ...

  9. 自己定义带三角形箭头的TextView

    <?xml version="1.0" encoding="utf-8"? > <resources>      <declare ...

  10. [mysql] C++操作mysql方法总结(1)

    From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作 ...