2019独角兽企业重金招聘Python工程师标准>>>

转载请标明出处:
http://blog.csdn.net/u011974987/article/details/50551580;
本文出自:【Xiho的博客】

网上关于如何用代码设置wifi的文章一搜一大堆,我在此就不再添乱了,我就试着给大家谈一谈我遇到的问题吧。

首先,我在做有系统定制某App的wifi模块的项目需求时候,系统默认在出厂设置的时候wifi 是关闭的,当打开连接wifi(获取wifi信息列表)的页面的时候,我要初始化把wifi打开,这个时候直接获取wifi列表,却迟迟没有数据返回,后来我又监听了

`WifiManager.SCAN_RESULTS_AVAILABLE_ACTION`,

这个广播,收到广播的时候再去获取wifi信息,果然,获取到了,可是这时候有个问题,哎妈呀,当wifi打开的时候,去调用这个

`mWifiManager.startScan();`

去扫描wifi ,等收到上面这个广播之后再去获取wifi,

mScanResults = mWifiManager.getScanResults();

但是这个期间却要等待12左右才获取到wifi的数据信息,对于一个产品,用户的体验来说,肯定是不合理的,当时,我也找了好多资料,却都没怎么说这方面的内容,苦了好久,也没想明白,因为也不甜熟悉这一块,后来就去Android 官网查看Wifi相关的API ,收获却不小,但是这个Bug还是没头绪,于是就单独写了一个小Demo 来一步一步测试,贴代码,再详细说明:

我们添加两个按钮,开启Wifi,关闭wifi:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.xu.MainActivity" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/textView1"android:layout_centerHorizontal="true"android:layout_marginTop="111dp"android:text="跳转" /><Buttonandroid:id="@+id/open_wifi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/button1"android:layout_alignLeft="@+id/button1"android:layout_marginBottom="49dp"android:text="开启WiFi" /><Buttonandroid:id="@+id/close_wifi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:text="关闭wifi" /></RelativeLayout>

MainActivity:

    /** * 打开wifi功能 * true:打开成功; * false:打开失败 */public boolean openWifi() {boolean bRet = true;if (!mWifiManager.isWifiEnabled()) {bRet = mWifiManager.setWifiEnabled(true);}return bRet;}/** * Function:关闭wifi * @return<br> */public boolean closeWifi() {if (mWifiManager.isWifiEnabled()) {return mWifiManager.setWifiEnabled(false);}return false;}

当进入这个页面的时候就去注册广播,然后先去手动打开wifi,调用openWifi()方法,

    /** * 注册广播 */private void registerBroadcast() {IntentFilter filter = new IntentFilter();filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);registerReceiver(mReceiver, filter);}

打印出相应的Log时间差信息:

        /** * 打开wifi */openWifi.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {openWifi();Log.d(TAG, "开启" + DateUtils.getCurrentDateString());mWifiManager.startScan();}});/** * 关闭wifi */closeWifi.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {closeWifi();Log.d(TAG, "关闭" + DateUtils.getCurrentDateString());}});

接收广播的时候也输出相应的日志信息,如果在接收到

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

这个广播的时候再去扫描wifi信息;

mWifiManager.startScan();
mScanResults = mWifiManager.getScanResults();

这个时候去看log输出的接收到这个广播的时间,代码如下:

    /** * 广播接收,监听网络 */private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {final String action = intent.getAction();// wifi已成功扫描到可用wifi。if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {Log.d(TAG, "接收到" +DateUtils.getCurrentDateString());mWifiManager.startScan();mScanResults = mWifiManager.getScanResults();Log.d(TAG, "mScanResults.size()===" + mScanResults.size());} }};

这个时候我就监听了这一个广播,log日志看图:

看上面的时间差就等候了近13秒左右才出来结果,就是为了解决这个问题,又去看有关的资料和API,后来有添加一个广播。

filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

更改后,在监听这个系统wifi打开时候,就去扫描wifi,

    /** * 广播接收,监听网络 */private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {final String action = intent.getAction();// wifi已成功扫描到可用wifi。if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {Log.d(TAG, "接收到" +DateUtils.getCurrentDateString());mScanResults = mWifiManager.getScanResults();Log.d(TAG, "mScanResults.size()===" + mScanResults.size());} //系统wifi的状态else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);switch (wifiState) {case WifiManager.WIFI_STATE_ENABLED:Log.d(TAG, "WiFi已启用" + DateUtils.getCurrentTime());mWifiManager.startScan(); <<<这里break;case WifiManager.WIFI_STATE_DISABLED:Log.d(TAG, "Wifi已关闭" + DateUtils.getCurrentTime());break;}}}};

运行后看下log日志:

demo会放在后面附件里

惊奇的发现,哇哦!这个速度到wifi数据显示的时间差就在2秒左右哦,非常棒!这个就是我们想要的效果~,当然了,其实还要更多的方法同样能实现这样的效果,本人能力有限,还是自己不够用心,基础不扎实,不够努力,导致了这样,那样的问题。在别人眼里,虽然没什么难度,但是终究自己弄了个小demo 测试了出来,就把遇到问题就分享给了大家,以后慢慢学会写博客~

等这段时间忙完了,我正整理一下连接wifi的相关操作的完整demo,到时候再更新博客~

Demo下载:Android 打开wifi快速获取Wifi信息Demo

转载于:https://my.oschina.net/xuhaozi/blog/780394

Android 打开WIFI并快速获取WIFI的信息相关推荐

  1. android 获取wifi的加密类型,Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等...

    下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等. 下面是效果图: GitHub 下载地址:https: ...

  2. 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

    文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...

  3. 过年装X神器,快速获取 wifi 密码!

    祝各位朋友们新年快乐,牛年大吉???? 在春节期间,亲朋好友串个门聚一聚是难免的了,作为主人,被问 wifi 密码是常见的事,每次都需要给客人们一遍又一遍的说密码,感觉很low啊.作为程序员,这完全不 ...

  4. Android 打开 GPS 导航并获取位置信息

    原文地址为: Android 打开 GPS 导航并获取位置信息 最近在做一个 Android 项目,需要用到GPS获取位置信息,从 API 查了一下,发现获取位置信息仅需极其简单的一句即可: getL ...

  5. Android开发问题集锦(六)--获取北斗卫星定位信息

    Android开发问题集锦六--获取北斗卫星定位信息 程序之美 程序之美 获取北斗卫星定位信息需要硬件的支持,市面上的手机设备有支持北斗定位的,有不支持的,但北斗定位在很多特定的业务需求中是很重要的, ...

  6. 利用爬虫快速获取企业招聘信息

    基于JSoup的HTML解析(以58同城为例) House.java package com.newer.spider;public class House {String room;String d ...

  7. android 高版本(设备11的)wifi扫描,获取wifi列表

    需求场景:智能设备有wifi模块,整套wifi功能,包括:搜索wifi列表,wifi连接,wifi切换,wifi忘记密码等. 高版本(安卓8以上)为了省电,节流,谷歌对wifi限制越来越多,安卓9以上 ...

  8. 3种方式获取Wifi名称 兼容获取Wifi名字为空 WifiInfo.getSSID为空的情况

    最近遇到一个奇怪的bug,部分手机上获取wifi的名字,通过WifiManager.getConnectionInfo().getSSID()为"unknown ssid",调试查 ...

  9. android gps 室内,如何快速获取纬度和经度或GPS数据,而我们在室内的Android手机?...

    我试图从android手机通过GPS获取纬度和经度信息,当我在室外或直接在天空下时,我可以立即获得值,但是当我在室内或室内时花费超过一分钟才能获得价值.任何人都可以帮助我在房间内使用我的应用程序时快速 ...

  10. Android 万能遥控 开源,快速实现WIFI红外遥控器(ESP8266 SoC模式)

    本帖最后由 黑洞 于 2017-8-7 22:07 编辑 目前很多家电带有红外遥控,如:电视.空调.风扇等等.有一个用手机控制的红外线遥控器的话现有的家电变成智能家电了,比如到家之前手机远程开空调等. ...

最新文章

  1. 有关Spring 3.0的发布
  2. 工具坐标6点法_轻松学机器人系列之各坐标系关系
  3. java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...
  4. UVA 11136——Hoax or what
  5. LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)
  6. android 线程那点事
  7. paging library java_Android官方分页组件介绍之Paging的使用详解
  8. Java程序优化的一些最佳实践
  9. C#導出Excel源碼
  10. 获取China大陆IP段的范围
  11. 用ffmpeg将mp3转为wav
  12. 服务器证书有问题苹果手机,iPhone应用程序中的“服务器证书不可信”错误
  13. Sonarqube 扫描maven项目
  14. ggplot2——饼图篇
  15. 版权变更有哪些流程?
  16. hwcomposer介绍
  17. kubeadm搭建的K8S集群升级
  18. 稳坐全球第一的小米手环,爆款背后的“护城河”是如何造就的?
  19. 什么样的护眼灯适合孩子用?真正适合孩子的护眼台灯
  20. 企业微信会员销售额达40%的资生堂,能带给我们怎样的数字化增长启示?

热门文章

  1. Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
  2. 工程从进场到竣工 资料报验的一般程序
  3. “极速交易”正在证券业兴起
  4. (转)1.43亿用户信息泄露案后 美国征信机构CEO离职
  5. CTP: NET封装后接口中序列化数据的问题
  6. 龙蜥社区8问,你关心的问题都在这里
  7. 新品Demo —— ZStack CMP多云管理平台
  8. 职场风云 | 导师的光亮
  9. 【路径规划】基于matalb遗传算法机器人栅格地图路径规划【含Matlab源码 175期】
  10. 【单目标优化求解】基于matlab粒子群混沌混合蝴蝶优化算法求解最优目标问题(HPSOBOA)【含Matlab源码 1538期】