Android入门项目(六)Android的wifi开发,androidwifi开发教程
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开发教程相关推荐
- Android入门项目(一):BMI体质指数计算器
目标:开发一款体质指数计算器,实现输入身高体重即可判断体型是否正常 知识点:Activity:布局:基本组件的使用 BMI是体质指数,公认的一种评定个人体质肥胖程度的分级方法,具体的计算方法是以体重除 ...
- android入门经典dvd,Android开发入门经典实例 - My notes
/* Android开发入门经典实例 */ My notes /* 安卓开发入门 */ 涉及到了Android开发中的一些关键知识,比如: 配置开发环境 App中一个屏幕的抽象: Activity 屏 ...
- Android入门项目:关于BMI体质指数计算器
目标:开发一款BMI体质指数计算器.用户在主界面中输入身高和体重,单击"计算BMI值"按钮后,在界面二通过TextView显示相应的结论:界面二点击返回能够回到主界面. 体质指数与 ...
- Android入门(六) | Activity 的启动模式 及 生产环境中关于 Activity 的小技巧
文章目录 Activity 的启动模式 standard singleTop singleTask singleInstance 技巧 了解当前界面是哪个 Activity 随时随地退出程序 启动活动 ...
- android入门视频教程!Android开发者跳槽面试,已拿offer入职
前言 这是"拔剑金九银十"的第二篇文章,本文主要针对3年以上的Android开发者进阶面试中高级开发工程师而整理. 希望可以对你们有所帮助.不多废话,进入正题. 目录: Java中 ...
- android手电筒项目代码,Android 开启闪光灯做手电筒 源码-Fun言
权限: 布局 android:layout_width="fill_parent" android:layout_height="fill_parent" an ...
- android 日记项目报告,Android开源项目-小熊日记
前言 一直是接着别人的代码来做App的,所以没有完整的开发App体验,总感觉有所缺少.于是,就利用业余时间亲自操刀开始了我的第一次开源项目.本文将讲述开源项目的整个开发过程. 项目初衷 开始这个项目的 ...
- 【Android入门】1、Android 入门概念、Android Studio 环境搭建并运行首个 App
文章目录 一.Android 简介 1.1 Android 四大组件 1.2 Android 操作系统架构 1.3 Android 技术栈整体感官 二.Android Studio环境搭建并运行首个A ...
- 用android做体质计算器,Android入门项目(一):BMI体质指数计算器
目标:开发一款体质指数计算器,实现输入身高体重即可判断体型是否正常 知识点:Activity:布局:基本组件的使用 BMI是体质指数,公认的一种评定个人体质肥胖程度的分级方法,具体的计算方法是以体重除 ...
最新文章
- ORACLE 回滚段详解
- ViewTreeObserver简介
- java编程有一筐鸡蛋_一筐鸡蛋数学题标准答案公式-一筐鸡蛋标准答案图片详细解答版下载_东坡手机下载...
- 如何在Github网页端处理不同分支之间的冲突
- 如何关闭Windows10任务栏上的输入法提示图标
- HTML标题h,HTML H标题标签
- keil c语言字符型变量的值,面向51单片机的Keil uVision4的四种基本数据类型
- 成年人的生活到底有多心酸?
- 网络雇佣军 Void Balaur,有组织有纪律,且从不休长假
- 从键盘输入3个整数,输出其中最大数
- 计算机xp桌面没有下面的图标,Windows XP 启动后桌面无图标、无任务栏的问题
- vue 实现简约留言板
- 【逗老师带你学IT】Amazing啊,Zoom落地企业内网IPPBX解决方案,ZOOM可以打国内电话了
- 2022年中国中小学教育信息化行业研究报告
- 西密歇根大学计算机科学专业排名,西密歇根大学计算机工程硕士排名第86(2020年TFE Times排名)...
- 区块链技术如何赋能公共资源招采管理服务?
- 原生js打造自定义播放器
- 极客日报:宿华不再担任快手CEO,程一笑接任;微软市值重登全球第一;Bootstrap 4.6.1发布
- WorldQuant因子分析复现
- python中string和bool的转换
热门文章
- 阿里云IoT平台CoAP接入 1 开发准备
- qlabel 边加载边更新_四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
- 福建师范大学2020年8月计算机应用基础,福建师范大学2020年8月课程考试《计算机应用基础》作业考核试题...
- 【524. 通过删除字母匹配到字典里最长单词】
- image与base64相互转换
- ppt 2010 动画窗格 组合元素 使用方法
- Excel 打开执行某方法,定时关闭
- SCRM:个性化数据营销的实战地
- 【视觉高级篇】21 # 如何添加相机,用透视原理对物体进行投影?
- 老男孩python学习_day002作业