当前位置: 首页 > 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);}}
}

http://www.lryc.cn/news/160672.html

相关文章:

  • TrOCR – 基于 Transformer 的 OCR 入门指南
  • MAC终端美化
  • Matlab常用字符串操作教程
  • 基于SSM的汽车养护管理系统
  • Redis发布订阅机制学习
  • 施展世界:GPT时代需要的教育,是学会如何提出好问题
  • Excel学习 WPS版
  • MySQL的Json类型个人用法详解
  • VUE 程序的执行过程(非常非常重要)
  • 指定cv::cuda::GpuMat创建所在的GPU卡
  • Camunda 7.x 系列【43】事务子流程
  • vscode设置的json的配置(个人怕忘了做个记录,各位不用看)
  • HJ17 坐标移动
  • 【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区
  • 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议
  • DDD 与 CQRS 才是黄金组合
  • 运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示
  • 【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结
  • 网络类型(通信分类)
  • python基础语法(一)
  • C语言学习笔记——常见问题
  • 使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)
  • 【C++入门】C语言的不足之处
  • 【已解决】oracle获取最近2学年的数据
  • 【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)
  • AIGC(生成式AI)试用 2 -- 胡言乱语
  • 爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)
  • 多态(个人学习笔记黑马学习)
  • 线程中future/atomic/async及nlohmann json的学习
  • windows安装MongoDB后进入命令交互界面失败解决方案