1. 简述
WiFi是Android手机重要功能,在设计过程中需要经常测试和比较WiFi信号、扫描到AP个数等。本实例利用Android框架的WiFiManager对象扫描AP列表,每个AP的信息包括SSID、BSSID、加密方式、信号等级、频率、带宽、时间戳等。说明一下,Android系统定义了带宽常数CHANNNEL_WIDTH_20MHZ=0; CHANNNEL_WIDTH_40MHZ=1;CHANNNEL_WIDTH_80MHZ=2;CHANNNEL_WIDTH_160MHZ=3;CHANNNEL_WIDTH_80MHZ_PLUS_MHZ=4,在扫描结果中用常数表示带宽。本实例有3个部分,UI线程主要设置用户界面显示AP列表、翻页处理、初始化SimpleAdapter、获得WiFiManager对象、开始扫描线程、注册广播接收器;定时扫描线程只负责扫描;广播接收器BroadcastReceiver mWifiStateReceiver,处理扫描返回数据,并在用户界面空闲时更新数据。程序源码如下:WiFi是Android手机重要功能,在设计过程中需要经常测试和比较WiFi信号、扫描到AP个数等。本实例利用Android框架的WiFiManager对象扫描AP列表,每个AP的信息包括SSID、BSSID、加密方式、信号等级、频率、带宽、时间戳等。说明一下,Android系统定义了带宽常数CHANNNEL_WIDTH_20MHZ=0; CHANNNEL_WIDTH_40MHZ=1;CHANNNEL_WIDTH_80MHZ=2;CHANNNEL_WIDTH_160MHZ=3;CHANNNEL_WIDTH_80MHZ_PLUS_MHZ=4,在扫描结果中用常数表示带宽。本实例有3个部分,UI线程主要设置用户界面显示AP列表、翻页处理、初始化SimpleAdapter、获得WiFiManager对象、开始扫描线程、注册广播接收器;定时扫描线程只负责扫描;广播接收器BroadcastReceiver mWifiStateReceiver,处理扫描返回数据,并在用户界面空闲时更新数据。程序源码如下:
2. WiFiAdmin.java

//列出手机扫描的WiFi AP,1秒更新一次。
package com.lmy.wifiadmin;import android.Manifest;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static java.lang.Thread.sleep;public class WiFiAdmin extends AppCompatActivity {//定义WifiManager对象private WifiManager mWifiManager;private final static int REQUEST_LOCATION=100;private ListView lvWifiList;private TextView mytxv;private SimpleAdapter myadapter;private ArrayList<HashMap<String,Object>> data=new ArrayList<HashMap<String, java.lang.Object>>();private int position;private int myscrollstate=AbsListView.OnScrollListener.SCROLL_STATE_IDLE;private IntentFilter mWifiStateFilter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);verifyCoarseLocationPermissions(WiFiAdmin.this);verifyFineLocationPermissions(WiFiAdmin.this);lvWifiList = (ListView) findViewById(R.id.lv);lvWifiList.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {myscrollstate = scrollState;if(scrollState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE){position = view.getFirstVisiblePosition();}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}});
    myadapter = new SimpleAdapter(WiFiAdmin.this, data, R.layout.oneline, new String[]{"no", "ap"}, new int[]{R.id.txvno, R.id.txvap});mytxv=findViewById(R.id.txv);mWifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);if(mWifiManager==null) return;if(!mWifiManager.isWifiEnabled()){mWifiManager.setWifiEnabled(true);}mWifiStateFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);registerReceiver(mWifiStateReceiver, mWifiStateFilter);new Thread(new Runnable() {@Overridepublic void run() {while(true){mWifiManager.startScan();try {sleep(1000);}catch (Exception e){e.printStackTrace();}}}}).start();
}private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {handleScanResultsAvailable();} else {Log.e("WiFi", "Received an unknown Wifi Intent");}}
};private void handleScanResultsAvailable() {int i;List<ScanResult> mWifiList = mWifiManager.getScanResults();if(mWifiList!=null) {if (myscrollstate == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {data.clear();for (i = 0; i < mWifiList.size(); i++) {HashMap<String, Object> map = new HashMap<String, Object>();map.put("no", Integer.toString(i + 1));map.put("ap", mWifiList.get(i).toString());data.add(map);}mytxv.setText("Total AP:" + Integer.toString(mWifiList.size()));lvWifiList.setAdapter(myadapter);if (position < mWifiList.size()) lvWifiList.setSelection(position);}}
}
private void verifyCoarseLocationPermissions(Activity activity){int permissionLocation = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION);if (permissionLocation != PackageManager.PERMISSION_GRANTED )  {ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION} ,REQUEST_LOCATION);}
}private void verifyFineLocationPermissions(Activity activity){int permissionLocation = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION);if (permissionLocation != PackageManager.PERMISSION_GRANTED )  {ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION} ,REQUEST_LOCATION);}
}@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case REQUEST_LOCATION:if ((grantResults.length>0)&&(grantResults[0]==PackageManager.PERMISSION_GRANTED)){Toast.makeText(getApplicationContext(),permissions[0]+"权限申请成功",Toast.LENGTH_LONG).show();}else{Toast.makeText(getApplicationContext(),permissions[0]+"权限申请失败",Toast.LENGTH_LONG).show();}break;}
}

}

3. main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".WiFiAdmin"><TextViewandroid:id="@+id/txv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="48px"android:text="WiFi List"/><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

4.oneline.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/txvno"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><TextViewandroid:id="@+id/txvap"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" />
</LinearLayout>

5. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.lmy.wifiadmin" ><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".WiFiAdmin" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

Android利用WiFiManager扫描AP列表的实例相关推荐

  1. android电脑文件列表不刷新,Android 利用RecyclerView.Adapter刷新列表中的单个view问题...

    首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...

  2. Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总

    写在前面:因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台.扫描速度慢等问题逐个放弃,最后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台.扫码速度等方面有较明显 ...

  3. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  4. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  5. android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...

  6. Android知识点大扫描

    Android知识点大扫描 什么是 3G 3G,全称为3rd Generation,中文含义就是指第三代数字通信. 所谓3G,是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统. 3G只是 ...

  7. android专题-蓝牙扫描、连接、读写

    android专题-蓝牙扫描.连接.读写 概念 外围设备 可以被其他蓝牙设备连接的外部蓝牙设备,不断广播自身的蓝牙名及其数据,如小米手环.共享单车.蓝牙体重秤 中央设备 可以搜索并连接周边的外围设备, ...

  8. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18730223),请尊重他人的辛勤劳动成果,谢谢! 写这篇文 ...

  9. Android中Wi-Fi扫描、连接和信息(一)

    1.Wi-Fi介绍 Wi-Fi是一种允许电子设备连接到一个无线局域网(WLAN)的技术,通常使用2.4G UHF或5G SHF ISM 射频频段.连接到无线局域网通常是有密码保护的:但也可是开放的,这 ...

最新文章

  1. AI在行动:改变科学界的人工智能
  2. java_AWT.内存监控
  3. torch分布式训练学习笔记
  4. 怎么在网页中调用netmeeting使用阿?
  5. 手机中陀螺仪传感器的四大作用
  6. ADB原理,Wi-Fi连接,常用命令及拓展
  7. 过滤特征_LR训练优化-稀疏特征过滤
  8. 检测Linux系统是否支持某系统调用
  9. 12. Qt中相关字符串处理
  10. css 语音,纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
  11. 入职五年回顾(十五) 2013年10月
  12. IPSEC 004 ---- 模板海纳百川,不定对端有容乃大
  13. 关于各种考勤打卡软件破解的思路和比较
  14. 智慧电力信息化系统建设整体方案
  15. html5 跨平台播放器,开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rt...
  16. springboot考研规划系统 毕业设计-附源码541230
  17. 计算机等级考试——三级网络技术
  18. Au入门系列之十:母带处理
  19. 两小时学会MySQL查询语句(下篇)
  20. 分层抽样不按比例如何加权_分层抽样及估计量.ppt

热门文章

  1. 蓝牙+语音系列产品分类
  2. 面向行业智能,华为数据通信推动的2020之变
  3. 先有小米后有vivo,为何这届手机厂商接连“造芯”?
  4. Java实现 LeetCode 278 第一个错误的版本
  5. zuk 科学计算机,充电也有黑科技了解ZUK手机电池的秘密
  6. 如何高效的读透一本书?我读了100本书总结出的3个阅读技巧
  7. html网络花店设计图片,花店网站设计,html+CSS+JS
  8. javascript 框架_Javascript框架的成本
  9. 单片机出现正在检测目标单片机问题解决办法
  10. html 判断是否是数字,判断是否是数字或者是否是整数.html