android 10 wifi操作

android 10及以上wifi发生了变化,android 10及以下代码需要适配。

android 10及以上:

1.权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

2.动态申请位置权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){if(ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions((Activity) context, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);ActivityCompat.requestPermissions((Activity) context, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);}
}

3.android 10以下打开wifi,android 10及以上无法再使用代码打开,需要手动到设置中打开。

/*** 打开WIFI(该方法会阻塞线程)** @param context*/
public static void openWifi(Context context) {if (Build.VERSION.SDK_INT < 29) {WifiManager wifiManager = getWifiManager(context);if (!wifiManager.isWifiEnabled()) {Log.i(TAG, "wifi is not Enabled");boolean isEnabled = wifiManager.setWifiEnabled(true);Log.i(TAG, "isEnabled:" + isEnabled);// 开启wifi功能需要一段时间,所以要等到wifi// 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句while (wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED) {try {// 为了避免程序一直while循环,让它睡个100毫秒检测……Thread.sleep(100);} catch (InterruptedException ie) {}}} else {Log.i(TAG, "wifi is Enabled");}} else {//Android 10 不支持代码打开WiFi开关,需要用户跳转系统界面自行打开开关}
}

4.连接wifi:

public boolean connect(Context context,WifiConfiguration wcg)
{final boolean[] isConnected = {false};if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q){try {NetworkSpecifier specifier =new WifiNetworkSpecifier.Builder().setSsidPattern(new PatternMatcher(WifiSSID, PatternMatcher.PATTERN_PREFIX)).setWpa2Passphrase(WifiPASSWORD).build();NetworkRequest request =new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).setNetworkSpecifier(specifier).build();ConnectivityManager connectivityManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {@Overridepublic void onAvailable(Network network) {Log.i(TAG,"WiFi连接成功");System.out.println("wifiInfo=================");isConnected[0] = true;}@Overridepublic void onUnavailable() {Log.i(TAG,"WiFi连接失败,请手动连接");}};//  connectivityManager.registerNetworkCallback(request,networkCallback);connectivityManager.requestNetwork(request,networkCallback);} catch (SecurityException e){e.printStackTrace();} catch (IllegalArgumentException e){e.printStackTrace();} catch (RuntimeException e){e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return isConnected[0];}else{WifiManager wifiManager = getWifiManager(context);int wcgID = wifiManager.addNetwork(wcg);boolean b = wifiManager.enableNetwork(wcgID, true);try {Thread.sleep(500);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}int count = 0;while (true) {count++;try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo.State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();if (NetworkInfo.State.CONNECTED == wifi) {try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;}if (count > 6000) {b = false;break;}}System.out.println("connect SSID:" + wcg.SSID);System.out.println("connect wcgID:" + wcgID);System.out.println("connect enableNetwork:" + b);return b;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPT 内部 — I : 了解文本生成

年轻的陀思妥耶夫斯基被介绍给生成AI&#xff0c;通过Midjourney创建 一、说明 我经常与不同领域的同事互动&#xff0c;我喜欢向几乎没有数据科学背景的人传达机器学习概念的挑战。在这里&#xff0c;我试图用简单的术语解释 GPT 是如何连接的&#xff0c;只是这次是书面形式。…

Windows安装Neo4j

图数据库概述 图数据库是基于图论实现的一种NoSQL数据库&#xff0c;其数据存储结构和数据查询方式都是以图论&#xff08;它以图为研究对象图论中的图是由若干给定的点及连接两点的线所构成的图形&#xff09;为基础的&#xff0c; 图数据库主要用于存储更多的连接数据。 Neo…

Java集合(Collection、Iterator、Map、Collections)概述——Java第十三讲

前言 本讲我们将继续来讲解Java的其他重要知识点——Java集合。Java集合框架是Java编程语言中一个重要的部分,它提供了一套预定义的类和接口,供程序员使用数据结构来存储和操作一组对象。Java集合框架主要包括两种类型:一种是集合(Collection),存储一个元素列表,…

C++【C++学习笔记_Wang】

时间进度C是什么&#xff1f;多态什么是多态&#xff1f;生活中的多态C中的多态 赋值兼容赋值兼容规则实现安全转换 时间进度 Day101 ok Day804 ok Day805 ok C是什么&#xff1f; C大部分包含C语言。 C完全兼容C语言。 C在C语言的基础上添加&#xff1a;封装、继承、多态…

Could not find artifact com.mysql:mysql-connector-j:pom:unknown

在 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency> 添加版本号 这里用的是8.0.33版本&#xff0c;输入5.0的版本依然会报错 我自身用的是5.0…

kubernetes(K8S)笔记

文章目录 大佬博客简介K8SDocker VS DockerDockerK8S简介K8S配合docker相比较单纯使用docker 大佬博客 Kubernetes&#xff08;通常缩写为K8s&#xff09;是一个用于自动化容器化应用程序部署、管理和扩展的开源容器编排平台。它的构造非常复杂&#xff0c;由多个核心组件和附加…

领域驱动设计:事件风暴构建领域模型

文章目录 事件风暴需要准备些什么&#xff1f;如何用事件风暴构建领域模型&#xff1f; 事件风暴是一项团队活动&#xff0c;领域专家与项目团队通过头脑风暴的形式&#xff0c;罗列出领域中所有的领域事件&#xff0c;整合之后形成最终的领域事件集合&#xff0c;然后对每一个…

【PowerQuery】Excel 一分钟以内刷新PowerQuery数据

当需要进行刷新的周期如果小于一分钟,采用数据自动刷新就无法实现自动刷新的目标。那就没有办法了吗?当然不是,这里就是使用VBA来实现自动刷新。这里实现VBA刷新的第一步就是将当前的Excel 保存为带有宏的Excel 文件,如果不带宏则无法运行带有宏代码的Excel文件,保存过程如…

数据结构与算法(一)数组的相关概念和底层java实现

一、前言 从今天开始&#xff0c;笔者也开始从0学习数据结构和算法&#xff0c;但是因为这次学习比较捉急&#xff0c;所以记录的内容并不会过于详细&#xff0c;会从基础和底层代码实现以及力扣相关题目去写相关的文章&#xff0c;对于详细的概念并不会过多讲解 二、数组基础…

中国大学MOOC临床医学概论(上)答案

1、关于糖尿病&#xff0c;下列哪个说法是错误的&#xff1f; A、糖尿病患者大部分无自觉症状 B、2型糖尿病具有广泛的遗传异质性 C、空腹血糖≥5.6mmol/L时应进行OGTT实验 D、对于2型糖尿病&#xff0c;不用胰岛素 答案&#xff1a;对于2型糖尿病&#xff0c;不用胰岛素 2、2型…

分析udev自动创建设备结点的过程

当系统内核发现系统中添加了某个新的设备时&#xff0c;在内核空间中会对该驱动进行注册&#xff0c;并获取该驱动设备的信息&#xff0c;然后创建一个设备类&#xff08;向上提交目录信息&#xff09;&#xff0c;并申请struct class对象并且初始化&#xff0c;然后创建一个设…

SpringCloud:Feign实现微服务之间相互请求

文章目录 &#x1f389;欢迎来到Java学习路线专栏~SpringCloud&#xff1a;Feign实现微服务之间相互请求 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;Java学习路线&#x1f4dc;其他专栏&#xf…

2023大数据面试总结

文章目录 Flink&#xff08;SQL相关后面专题补充&#xff09;1. 把状态后端从FileSystem改为RocksDB后&#xff0c;Flink任务状态存储会发生哪些变化&#xff1f;2. Flink SQL API State TTL 的过期机制是 onCreateAndUpdate 还是 onReadAndWrite&#xff1f;3. watermark 到底…

SQL_牛客网_SQL264_求每个登陆日期的次日留存率

牛客每个人最近的登录日期(五) 牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表&#xff0c;简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-…

【服务器】Ubuntu 安装LVM | LVM使用

Ubuntu 安装LVM 参考&#xff1a;https://blog.vgot.net/archives/installl-linux-with-lvm-all-disk-space.html 扩展一个卷组 参见&#xff1a;https://blog.csdn.net/qq_39441603/article/details/128100497

使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决

记录&#xff1a;471 场景&#xff1a;使用IntelliJ IDEA本地启动调试Flink流计算时&#xff0c;报错一&#xff1a;加载DataStream报错java.lang.ClassNotFoundException。报错二&#xff1a;No ExecutorFactory found to execute the application。 版本&#xff1a;JDK 1.…

Java中的分布式计算框架有哪些?

Java中有许多流行的分布式计算框架。以下是其中一些&#xff1a; 这只是Java中一些流行的分布式计算框架的简要介绍。根据具体需求和场景&#xff0c;还有其他框架可供选择。 Apache Hadoop&#xff1a;一个用于分布式存储和并行处理大数据集的开源框架。它包括Hadoop分布式文件…

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言 当一个事物的内部&…

Javase | 包装类

目录&#xff1a; 1.包装类1.1 包装类1.2 包装类的分类 2.思考&#xff1a;为什么要提供8种包装类型&#xff1f;3.通过访问包装类的常量&#xff0c;获取“最大值”和最小值4.装箱 和 拆箱&#xff1a;4.1 装箱4.2 拆箱 5.Number类&#xff1a;5.1 Number类的构造方法5.2 Numb…

Shell编程之定时任务

什么是定时任务 顾名思义&#xff0c;定时任务指的就是在指定/特定的时间进行工作&#xff0c;例如备份/归档数据、清理临时文件等。 在 Linux 中&#xff0c;可以使用 cron 定时器来定期执行任务。cron 是一个在后台运行的守护进程&#xff0c;用于根据指定的时间表自动执行任…