boolean isUpdated = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false);

Log.i(TAG, "onReceive: WIFI扫描 " + (isUpdated ? “完成” : “未完成”));

} else {

Log.i(TAG, “onReceive: WIFI扫描完成”);

}

Message scanResultsMessage = Message.obtain();

scanResultsMessage.what = SCAN_RESULTS_UPDATED;

scanResultsMessage.obj = wifiManager.getScanResults();

mCallBackHandler.sendMessage(scanResultsMessage);

break;

//WIFI网络状态变化通知

case WifiManager.NETWORK_STATE_CHANGED_ACTION:

WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);

if (null != wifiInfo && wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {

String ssid = wifiInfo.getSSID();

Log.i(TAG, "onReceive: 网络连接成功 ssid = " + ssid);

}

break;

//WIFI连接状态变化的时候

case WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION:

boolean isConnected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);

Log.i(TAG, "onReceive: SUPPLICANT_CONNECTION_CHANGE_ACTION isConnected = " + isConnected);

break;

//wifi连接结果通知 WIFI连接请求状态发生改变

case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:

// 获取连接状态

SupplicantState supplicantState = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);

Message logMessage = Message.obtain();

logMessage.what = WIFI_CONNECT_LOG;

logMessage.obj = supplicantState.toString();

logMessage.obj = supplicantState.toString();

mCallBackHandler.sendMessage(logMessage);

switch (supplicantState) {

case INTERFACE_DISABLED: // 接口禁用

Log.i(TAG, “onReceive: INTERFACE_DISABLED 接口禁用”);

break;

case DISCONNECTED:// 断开连接

// Log.i(TAG, “onReceive: DISCONNECTED:// 断开连接”);

// break;

case INACTIVE: // 不活跃的

WifiInfo connectFailureInfo = wifiManager.getConnectionInfo();

Log.i(TAG, "onReceive: INACTIVE 不活跃的 connectFailureInfo = " + connectFailureInfo);

if (null != connectFailureInfo) {

Message wifiConnectFailureMessage = Message.obtain();

wifiConnectFailureMessage.what = WIFI_CONNECT_FAILURE;

wifiConnectFailureMessage.obj = connectFailureInfo.getSSID();

mCallBackHandler.sendMessage(wifiConnectFailureMessage);

// 断开连接

int networkId = connectFailureInfo.getNetworkId();

boolean isDisable = wifiManager.disableNetwork(networkId);

boolean isDisconnect = wifiManager.disconnect();

Log.i(TAG, "onReceive: 断开连接 = " + (isDisable && isDisconnect));

}

break;

case SCANNING: // 正在扫描

Log.i(TAG, “onReceive: SCANNING 正在扫描”);

break;

case AUTHENTICATING: // 正在验证

Log.i(TAG, “onReceive: AUTHENTICATING: // 正在验证”);

break;

case ASSOCIATING: // 正在关联

Log.i(TAG, “onReceive: ASSOCIATING: // 正在关联”);

break;

case ASSOCIATED: // 已经关联

Log.i(TAG, “onReceive: ASSOCIATED: // 已经关联”);

break;

case FOUR_WAY_HANDSHAKE: // 四次握手

Log.i(TAG, “onReceive: FOUR_WAY_HANDSHAKE:”);

break;

case GROUP_HANDSHAKE: // 组握手

Log.i(TAG, “onReceive: GROUP_HANDSHAKE:”);

break;

case COMPLETED: // 完成

Log.i(TAG, “onReceive: WIFI_CONNECT_SUCCESS: // 完成”);

WifiInfo connectSuccessInfo = wifiManager.getConnectionInfo();

if (null != connectSuccessInfo) {

Message wifiConnectSuccessMessage = Message.obtain();

wifiConnectSuccessMessage.what = WIFI_CONNECT_SUCCESS;

wifiConnectSuccessMessage.obj = connectSuccessInfo.getSSID();

mCallBackHandler.sendMessage(wifiConnectSuccessMessage);

}

break;

case DORMANT: // 休眠

Log.i(TAG, “onReceive: DORMANT:”);

break;

case UNINITIALIZED: // 未初始化

Log.i(TAG, “onReceive: UNINITIALIZED: // 未初始化”);

break;

case INVALID: // 无效的

Log.i(TAG, “onReceive: INVALID: // 无效的”);

break;

default:

break;

}

break;

default:

break;

}

}

}

相关API请参阅:官网WifiManagerAPI


六,权限



七,打开WIFI


/**

  • 打开Wifi

*/

public void openWiFi() {

if (!isWifiEnabled() && null != mWifiManager) {

mWifiManager.setWifiEnabled(true);

}

}


八,关闭WIFI


/**

  • 关闭Wifi

*/

public void closeWiFi() {

if (isWifiEnabled() && null != mWifiManager) {

mWifiManager.setWifiEnabled(false);

}

}


九,扫描附近的WIFI


/**

  • 扫描附近的WIFI

*/

public void startScan() {

if (null != mWifiManager) {

mWifiManager.startScan();

}

}


十,获取WIFI列表


/**

  • 获取最近扫描的WIFI热点

  • @return WIFI热点列表

*/

public List getScanResults() {

// 得到扫描结果

if (null != mWifiManager) {

return mWifiManager.getScanResults();

}

return null;

}


十一,通过密码连接到WIFI


/**

  • 连接到开放网络

  • @param ssid 热点名

  • @return 配置是否成功

*/

public boolean connectOpenNetwork(@NonNull String ssid) {

// 获取networkId

int networkId = setOpenNetwork(ssid);

if (-1 != networkId) {

// 保存配置

boolean isSave = saveConfiguration();

// 连接网络

boolean isEnable = enableNetwork(networkId);

return isSave && isEnable;

}

return false;

}

/**

  • 连接到WEP网络

  • @param ssid 热点名

  • @param password 密码

  • @return 配置是否成功

*/

public boolean connectWEPNetwork(@NonNull String ssid, @NonNull String password) {

// 获取networkId

int networkId = setWEPNetwork(ssid, password);

if (-1 != networkId) {

// 保存配置

boolean isSave = saveConfiguration();

// 连接网络

boolean isEnable = enableNetwork(networkId);

return isSave && isEnable;

}

return false;

}

/**

  • 连接到WPA2网络

  • @param ssid 热点名

  • @param password 密码

  • @return 配置是否成功

*/

public boolean connectWPA2Network(@NonNull String ssid, @NonNull String password) {

// 获取networkId

int networkId = setWPA2Network(ssid, password);

if (-1 != networkId) {

// 保存配置

boolean isSave = saveConfiguration();

// 连接网络

boolean isEnable = enableNetwork(networkId);

return isSave && isEnable;

}

return false;

}

这里就写了三种加密方式的连接,其中ssid是扫描到的,password是单击ListView列表弹出EditText框输入的。


十二,直接连接配置过的WIFI


这里的思路是通过NetworkId连接到WIFI (配置过的网络可以直接获取到NetworkID,从而不用再输入密码)。代码中采用回调方式来实现,这个具体请看项目代码。


十三,断开指定WIFI


/**

  • 断开指定 WIFI

  • @param netId netId

  • @return 是否断开

*/

public boolean disconnectWifi(int netId) {

if (null != mWifiManager) {

boolean isDisable = mWifiManager.disableNetwork(netId)

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

开源分享完整内容戳这里

;

boolean isDisconnect = mWifiManager.disconnect();

return isDisable && isDisconnect;

}

return false;

}


十四,删除配置


/**

  • 删除配置

  • @param netId netId

  • @return 是否删除成功

*/

public boolean deleteConfig(int netId) {

if (null != mWifiManager) {

boolean isDisable = mWifiManager.disableNetwork(netId);

boolean isRemove = mWifiManager.removeNetwork(netId);

boolean isSave = mWifiManager.saveConfiguration();

return (isDisable && isRemove && isSave);

}

return false;

}

这个功能是在ListView长按监听那里的


十五,开启热点


Android7.0及7.0之前的方法:

/**

  • 创建热点,这里只能是7.0或7.0之前的版本

  • 手动设置热点名和密码

*/

public void createWifiHotspot7() {

WifiConfiguration config = new WifiConfiguration();

config.SSID = “性感荷官在线发脾气”;

config.preSharedKey = “123456789”;

config.hiddenSSID = true;

config.allowedAuthAlgorithms

.set(WifiConfiguration.AuthAlgorithm.OPEN);//开放系统认证

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

//设置加密的方式,这个对应小米手机MIUI

int indexOfWPA2_PSK = 4;

//从WifiConfiguration.KeyMgmt数组中查找WPA2_PSK的值

for (int i = 0; i < WifiConfiguration.KeyMgmt.strings.length; i++) {

if (WifiConfiguration.KeyMgmt.strings[i].equals(“WPA2_PSK”)) {

indexOfWPA2_PSK = i;

break;

}

}

config.allowedKeyManagement.set(indexOfWPA2_PSK);

config.allowedPairwiseCiphers

.set(WifiConfiguration.PairwiseCipher.TKIP);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

config.allowedPairwiseCiphers

.set(WifiConfiguration.PairwiseCipher.CCMP);

config.status = WifiConfiguration.Status.ENABLED;

//通过反射调用设置热点

try {

Android入门项目(六)Android的wifi开发,androidwifi开发教程相关推荐

  1. Android入门项目(一):BMI体质指数计算器

    目标:开发一款体质指数计算器,实现输入身高体重即可判断体型是否正常 知识点:Activity:布局:基本组件的使用 BMI是体质指数,公认的一种评定个人体质肥胖程度的分级方法,具体的计算方法是以体重除 ...

  2. android入门经典dvd,Android开发入门经典实例 - My notes

    /* Android开发入门经典实例 */ My notes /* 安卓开发入门 */ 涉及到了Android开发中的一些关键知识,比如: 配置开发环境 App中一个屏幕的抽象: Activity 屏 ...

  3. Android入门项目:关于BMI体质指数计算器

    目标:开发一款BMI体质指数计算器.用户在主界面中输入身高和体重,单击"计算BMI值"按钮后,在界面二通过TextView显示相应的结论:界面二点击返回能够回到主界面. 体质指数与 ...

  4. Android入门(六) | Activity 的启动模式 及 生产环境中关于 Activity 的小技巧

    文章目录 Activity 的启动模式 standard singleTop singleTask singleInstance 技巧 了解当前界面是哪个 Activity 随时随地退出程序 启动活动 ...

  5. android入门视频教程!Android开发者跳槽面试,已拿offer入职

    前言 这是"拔剑金九银十"的第二篇文章,本文主要针对3年以上的Android开发者进阶面试中高级开发工程师而整理. 希望可以对你们有所帮助.不多废话,进入正题. 目录: Java中 ...

  6. android手电筒项目代码,Android 开启闪光灯做手电筒 源码-Fun言

    权限: 布局 android:layout_width="fill_parent" android:layout_height="fill_parent" an ...

  7. android 日记项目报告,Android开源项目-小熊日记

    前言 一直是接着别人的代码来做App的,所以没有完整的开发App体验,总感觉有所缺少.于是,就利用业余时间亲自操刀开始了我的第一次开源项目.本文将讲述开源项目的整个开发过程. 项目初衷 开始这个项目的 ...

  8. 【Android入门】1、Android 入门概念、Android Studio 环境搭建并运行首个 App

    文章目录 一.Android 简介 1.1 Android 四大组件 1.2 Android 操作系统架构 1.3 Android 技术栈整体感官 二.Android Studio环境搭建并运行首个A ...

  9. 用android做体质计算器,Android入门项目(一):BMI体质指数计算器

    目标:开发一款体质指数计算器,实现输入身高体重即可判断体型是否正常 知识点:Activity:布局:基本组件的使用 BMI是体质指数,公认的一种评定个人体质肥胖程度的分级方法,具体的计算方法是以体重除 ...

最新文章

  1. ORACLE 回滚段详解
  2. ViewTreeObserver简介
  3. java编程有一筐鸡蛋_一筐鸡蛋数学题标准答案公式-一筐鸡蛋标准答案图片详细解答版下载_东坡手机下载...
  4. 如何在Github网页端处理不同分支之间的冲突
  5. 如何关闭Windows10任务栏上的输入法提示图标
  6. HTML标题h,HTML H标题标签
  7. keil c语言字符型变量的值,面向51单片机的Keil uVision4的四种基本数据类型
  8. 成年人的生活到底有多心酸?
  9. 网络雇佣军 Void Balaur,有组织有纪律,且从不休长假
  10. 从键盘输入3个整数,输出其中最大数
  11. 计算机xp桌面没有下面的图标,Windows XP 启动后桌面无图标、无任务栏的问题
  12. vue 实现简约留言板
  13. 【逗老师带你学IT】Amazing啊,Zoom落地企业内网IPPBX解决方案,ZOOM可以打国内电话了
  14. 2022年中国中小学教育信息化行业研究报告
  15. 西密歇根大学计算机科学专业排名,西密歇根大学计算机工程硕士排名第86(2020年TFE Times排名)...
  16. 区块链技术如何赋能公共资源招采管理服务?
  17. 原生js打造自定义播放器
  18. 极客日报:宿华不再担任快手CEO,程一笑接任;微软市值重登全球第一;Bootstrap 4.6.1发布
  19. WorldQuant因子分析复现
  20. python中string和bool的转换

热门文章

  1. 阿里云IoT平台CoAP接入 1 开发准备
  2. qlabel 边加载边更新_四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
  3. 福建师范大学2020年8月计算机应用基础,福建师范大学2020年8月课程考试《计算机应用基础》作业考核试题...
  4. 【524. 通过删除字母匹配到字典里最长单词】
  5. image与base64相互转换
  6. ppt 2010 动画窗格 组合元素 使用方法
  7. Excel 打开执行某方法,定时关闭
  8. SCRM:个性化数据营销的实战地
  9. 【视觉高级篇】21 # 如何添加相机,用透视原理对物体进行投影?
  10. 老男孩python学习_day002作业