当前位置: 首页 > news >正文

Android扫码连接WIFI实现

0,目标

        APP中实现扫WIFI分享码自动连接WIFI功能

1,前提条件

        设备需要有个扫码器(摄像头拍照识别也行),APP调用扫码器读取WIFI连接分享码。

2,增加权限

        在AndroidManifest.xml中增加权限

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3,参数检查

        扫码成功后,对内容进行一个基本的判断,确认扫码数据中有P和T的参数

//WIFI连接
if (strResult.contains("P:") && strResult.contains("T:")) {// 自动连接wifiConnectWifi(strResult);
}
4,WIFI连接调用
    private void ConnectWifi(String strResult){//取连接参数String passwordTemp = strResult.substring(strResult.indexOf("P:"));password = passwordTemp.substring(2,passwordTemp.indexOf(";"));String netWorkTypeTemp = strResult.substring(strResult.indexOf("T:"));netWorkType = netWorkTypeTemp.substring(2,netWorkTypeTemp.indexOf(";"));String netWorkNameTemp = strResult.substring(strResult.indexOf("S:"));netWorkName = netWorkNameTemp.substring(2,netWorkNameTemp.indexOf(";"));WifiAdmin wifiAdmin = new WifiAdmin(MainActivity.this);if (!wifiAdmin.mWifiManager.isWifiEnabled()) {Toast.makeText(this, "开启wifi设置", Toast.LENGTH_LONG).show();wifiAdmin.openWifi();}int net_type = 0x13;if (netWorkType.compareToIgnoreCase("wpa") == 0) {net_type = WifiAdmin.TYPE_WPA;// wpa} else if (netWorkType.compareToIgnoreCase("wep") == 0) {net_type = WifiAdmin.TYPE_WEP;// wep} else {net_type = WifiAdmin.TYPE_NO_PASSWD;// 无加密}boolean bConnect =  wifiAdmin.addNetwork(netWorkName,password,net_type);//连接if(bConnect){Toast.makeText(this, "网络连接成功", Toast.LENGTH_LONG).show();}else{Toast.makeText(this, "网络连接失败", Toast.LENGTH_LONG).show();}}

5,WIFI连接类

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;import java.util.List;/*** Created by cmos.*/
public  class WifiAdmin {private static String TAG="WifiManger";public static final int TYPE_NO_PASSWD = 0x11;public static final int TYPE_WEP = 0x12;public static final int TYPE_WPA = 0x13;public WifiManager mWifiManager;private WifiInfo mWifiInfo;public WifiAdmin(Context context){mWifiManager=  (WifiManager) context.getSystemService(Context.WIFI_SERVICE);// mWifiInfo = mWifiManager.getConnectionInfo();}// 添加一个网络并连接public boolean addNetwork(WifiConfiguration wifi){int netId=mWifiManager.addNetwork(wifi);return mWifiManager.enableNetwork(netId,true);}public boolean addNetwork(String ssid, String passwd, int type) {if (ssid == null || passwd == null || ssid.equals("")) {Log.e(TAG, "addNetwork() ## nullpointer error!");return false ;}if (type != TYPE_NO_PASSWD && type != TYPE_WEP && type != TYPE_WPA) {Log.e(TAG, "addNetwork() ## unknown type = " + type);}return addNetwork(createWifiInfo(ssid, passwd, type));}public WifiConfiguration createWifiInfo(String SSID, String password, int type) {Log.e(TAG, "SSID = " + SSID + "## Password = " + password + "## Type = " + type);WifiConfiguration config = new WifiConfiguration();config.allowedAuthAlgorithms.clear();config.allowedGroupCiphers.clear();config.allowedKeyManagement.clear();config.allowedPairwiseCiphers.clear();config.allowedProtocols.clear();config.SSID = "\"" + SSID + "\"";WifiConfiguration tempConfig = this.IsExsits(SSID);if (tempConfig != null) {//如果已存在该SSID的wifimWifiManager.removeNetwork(tempConfig.networkId);}// 分为三种情况:1没有密码2用wep加密3用wpa加密if (type == TYPE_NO_PASSWD) {// 没有密码config.wepKeys[0] = "";config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.wepTxKeyIndex = 0;} else if (type == TYPE_WEP) {  //  wep加密config.hiddenSSID = true;config.wepKeys[0] = "\"" + password + "\"";config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.wepTxKeyIndex = 0;} else if (type == TYPE_WPA) {   // WPA加密config.preSharedKey = "\"" + password + "\"";config.hiddenSSID = true;config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);// config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.status = WifiConfiguration.Status.ENABLED;}return config;}//检测该SSID是否已存在private WifiConfiguration IsExsits(String SSID) {List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();for (WifiConfiguration existingConfig : existingConfigs) {if (existingConfig.SSID.equals("\"" + SSID + "\"")) {return existingConfig;}}return null;}// 打开WIFIpublic void openWifi() {if (!mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(true);}}// 关闭WIFIpublic void closeWifi() {if (mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(false);}}
}

相关文章:

Android扫码连接WIFI实现

0&#xff0c;目标 APP中实现扫WIFI分享码自动连接WIFI功能 1&#xff0c;前提条件 设备需要有个扫码器&#xff08;摄像头拍照识别也行&#xff09;&#xff0c;APP调用扫码器读取WIFI连接分享码。 2&#xff0c;增加权限 在AndroidManifest.xml中增加权限 <uses-permissi…...

TrOCR – 基于 Transformer 的 OCR 入门指南

多年来,光学字符识别 (OCR) 出现了多项创新。它对零售、医疗保健、银行和许多其他行业的影响是巨大的。尽管有着悠久的历史和多种最先进的模型,研究人员仍在不断创新。与深度学习的许多其他领域一样,OCR 也看到了变压器神经网络的重要性和影响。如今,我们拥有像TrOCR(Tran…...

MAC终端美化

先看看效果&#xff1a; 1.安装on-my-zsh 打开终端&#xff0c;输出&#xff1a; sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"安装过程中如果出现了链接超时的错误&#xff0c;不要慌&#xff0c;就再来一次&#x…...

Matlab常用字符串操作教程

Matlab是一种功能强大的编程语言&#xff0c;它提供了丰富的字符串操作函数。在本教程中&#xff0c;我们将介绍一些常用的Matlab字符串操作函数和用法。 字符串的创建和访问&#xff1a; 使用单引号或双引号创建字符串&#xff1a;str Hello World; 或 str "Hello Worl…...

基于SSM的汽车养护管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Redis发布订阅机制学习

【IT老齐151】Redis发布订阅机制是如何实现的&#xff1f;_哔哩哔哩_bilibili go-redis的发布与订阅 - 知乎 (zhihu.com) 前置&#xff1a; 先输入 redis-server.exe 启动redis&#xff0c;否则对应接口不开放 再输入 redis-cli 命令启动客户端服务 1.机制示意图 当一…...

施展世界:GPT时代需要的教育,是学会如何提出好问题

来源&#xff1a;BV1co4y1W7h7 有很多脑力活&#xff0c;它实际上是伪装成脑力活的体力活&#xff0c;它在回答问题这个层面&#xff0c;那是非常的厉害&#xff0c;人现在肯定是比不过它了&#xff0c;注意了&#xff0c;这是回答问题的层面&#xff0c;但问题是谁来问问题呢&…...

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …...

MySQL的Json类型个人用法详解

前言 虽然MySQL很早就添加了Json类型&#xff0c;但是在业务开发过程中还是很少设计带这种类型的表。少不代表没有&#xff0c;当真正要对Json类型进行特定查询&#xff0c;修改&#xff0c;插入和优化等操作时&#xff0c;却感觉一下子想不起那些函数怎么使用。比如把json里的…...

VUE 程序的执行过程(非常非常重要)

在Vue.js应用程序中&#xff0c;index.html和main.js的执行顺序是&#xff1a; 1. 首先&#xff0c;浏览器加载index.html文件。 2. 在index.html文件中&#xff0c;通过<script>标签引入了main.js文件。 3. 当浏览器遇到<script>标签时&#xff0c;它会停止解析H…...

指定cv::cuda::GpuMat创建所在的GPU卡

目录 1. 背景2. 函数说明3. 代码 1. 背景 在多卡服务器运行多应用时&#xff0c;要将应用跑在不同的GPU上&#xff0c;就需要通过代码指定所运行的GPU&#xff0c;cv::cuda::GpuMat创建时&#xff0c;同样需要指定创建所对应的GPU。 2. 函数说明 cv::cuda::setDevice 是 Ope…...

Camunda 7.x 系列【43】事务子流程

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 和 ACID 的区别3. 取消和补偿事件3.1 取消结束事件3.2 取消边界事件3.3 补偿边界…...

vscode设置的json的配置(个人怕忘了做个记录,各位不用看)

{//导入文件时是否携带文件的扩展名"path-autocomplete.extensionOnImport": true,// 配置路径提示"path-autocomplete.pathMappings": {"": "${folder}/src"},"liveServer.settings.CustomBrowser": "microsoft-edge&…...

HJ17 坐标移动

Powered by:NEFU AB-IN Link 文章目录 HJ17 坐标移动题意思路代码 HJ17 坐标移动 题意 开发一个坐标计算工具&#xff0c; A表示向左移动&#xff0c;D表示向右移动&#xff0c;W表示向上移动&#xff0c;S表示向下移动。从&#xff08;0,0&#xff09;点开始移动&#xff0c;…...

【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区

初始化集群 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君…...

808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议

808协议是指中国国标GB/T 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议&#xff0c;也被称为JT/T808协议。该协议规定了车辆与监管平台之间的通信规范&#xff0c;用于实现对道路车辆的远程监管和服务。 JT/T808协议主要包含以下几个方面的…...

DDD 与 CQRS 才是黄金组合

在日常工作中&#xff0c;你是否也遇到过下面几种情况&#xff1a; 使用一个已有接口进行业务开发&#xff0c;上线后出现严重的性能问题&#xff0c;被老板当众质疑&#xff1a;“你为什么不使用缓存接口&#xff0c;这个接口全部走数据库&#xff0c;这怎么能抗住&#xff01…...

运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试…...

【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结

【JavaEE】进阶 个人博客系统&#xff08;6&#xff09; 文章目录 【JavaEE】进阶 个人博客系统&#xff08;6&#xff09;1. 项目发布1.1 后端代码修改1.1.1 数据库密码1.1.2 端口号修改1.1.3 文件保存地址修改1.1.4 静态资源映射修改 1.2 云服务器1.2.1 建库建表1.2.2 必要…...

网络类型(通信分类)

网络类型是根据数据链路层所使用的协议及规则进行划分&#xff0c;大致可分为两类网络&#xff1a; 点到点&#xff08;p2p&#xff0c;point to point&#xff09;MA&#xff08;multiple access&#xff09;多路访问&#xff1a;BMA、NBMA 不同的网络类型实际为不同的数据链…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...