admin管理员组

文章数量:1530946

写在前面

距离上次写博客还是在几个月以前了,最近几个月实在是太忙了,跑去做课设和ios开发,短暂地告别了Android,直到最近在某院实习做毕业设计时需要用到Android系统进行室内定位开发,本文主要是将在项目开发的过程中遇到的关于wifi开发的问题记录下来,方便大家整理。
#情景提要
Android开发过程中,应该说Wifi是很重要的一个功能,在产品中,可能需要随时监听网络状况的变化等等,最近的项目是做室内定位,需要采集各种Wifi的信号和其距离,算出一个大概的范围再结合其他的技术手段进行信息融合得到精确的定位数据,其实个人对wifi一次定位是不抱太大希望的,因为wifi信号的衰减和硬件、环境、空间等等随机因素有关,是及其不准确的,但是项目既然有这个内容,也应当仔细地去研究研究,之前看过网上很多资料,发现大家只是单纯地谈API,对新手很不友好,因此我也想换一个角度来描述一下android Wifi开发,首先我总结以下几个问题:

  • wifi的权限管理
  • 如何开关设备的wifi功能
  • 监听设备wifi状态的改变
  • 获取扫描wifi结果
  • 如何连接/断开一个wifi
  • 在项目中的特殊用法

我个人认为解决以上几点问题就足够了,当然,最后一个在项目中的特殊用法是一个相对“反人类“的用法,感兴趣的可以看看。


wifi的权限管理

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

非隐私权限,因此不用考虑6.0的动态权限管理,直接申明就好,当然这里有一个坑,也是很多人不理解容易遗漏的:获取wifi需要定位权限。为什么需要定位权限呢?其实很好理解的,wifi其实也是一种定位手段,大家可能有用假药或者高德地图,wifi开启能够提高定位的准确性,具体细节我觉得大家不用深究,毕竟不是做通信的,只需要知道下面的重点就好:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

动态权限申请过程,略。

基础说明

在此说明,面向对象的五(六)大基本原则(S.O.L.I.D)第一条就是单一职责,因此最好是在代码中wifi功能体现到一个类之中并且使用单例模式(饿汉)获取它的实例,比如我就用的MyWifiManager类。然后,大家先看一下我认为在wifi功能开发中最为重要的(3+1)个类:

WIFI开发所关心的三个类和功能描述:

类名 功能
WifiManager wifi统一管理类,进行各种wifi操作
WifiInfo 描述当前连接的wifi热点信息
WifiConfiguration wifi网络配置信息

除此之外还有一个类:

类名 功能
ScanResult 描述扫描出的wifi热点的信息

以上的(3+1)个类是关乎各种wifi操作的最为重要的类,还有以下四个专业术语再帮助大家巩

本文标签: 功能androidwifi