android开发:安卓13Wifi和热点查看与设置功能
近日对安卓热点功能做了一些技术验证,目的是想利用手机开热点给设备做初始化,用的是安卓13,简言之:
- 热点设置功能不可用,不可设置SSID和密码,不可程序控制开启关闭,网上的代码统统都过时了
- LocalOnlyHotspot不可设置SSID和密码,只能系统随机(因为没有意义,所以也没有验证)
- wifi开关不能用程序设置,只能呼出配置界面让用户去操作
- 热点开关无法呼出
- 热点手机获取热点IP是可用的
- 热点手机和设备的UDP广播是可用的
下面介绍细节。以下代码基于IDEA生成的默认简单应用,面向android 10,测试手机为android 13。textviewFirst是默认生成的标签,本代码用这个标签来显示结果。
目录
一、相关权限
二、获取wifi状态和呼出wifi设置界面
三、获取热点状态
一、相关权限
本文涉及到的权限如下(可能某些是不必要的):
在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.CHANGE_WIFI_MULTICAST_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.INTERNET"/>
实测一下应该能去掉几个权限。这里增加了权限之后还需要在程序里检查,如果没有权限就向用户提出授权申请。
启动代码的变量增加:
private static String[] PERMISSION_STORAGE = {"android.permission.ACCESS_WIFI_STATE", "android.permission.CHANGE_WIFI_STATE", "android.permission.CHANGE_WIFI_MULTICAST_STATE", "android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.INTERNET"};private static int REQUEST_CODE_PERMISSION_STORAGE = 100;
onCreate增加:
if (Build.VERSION.SDK_INT >= 23) {for (String str : PERMISSION_STORAGE) {if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {this.requestPermissions(PERMISSION_STORAGE, REQUEST_CODE_PERMISSION_STORAGE);}}}
这段代码用于如果缺少权限就向用户申请。
二、获取wifi状态和呼出wifi设置界面
呼出设置界面需要使用ActivityResultLauncher。
增加变量(比如在FirstFragment里面):
private ActivityResultLauncher launcher;
onCreateView增加:
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {@Overridepublic void onActivityResult(ActivityResult result) {binding.textviewFirst.append("设置界面返回"+result.getResultCode()+"\n");}});
要先注册ActivityResultLauncher。设置界面并不返回有意义的值。后面仍需检查wifi状态。
在需要的时候呼出设置界面:
public void callWifiConfig(boolean wantClose) {//获取wifi管理服务WifiManager wifiManager = (WifiManager) this.getContext().getSystemService(Context.WIFI_SERVICE);if(null!=wifiManager)binding.textviewFirst.append("wifiManager获取成功\n");if (wantClose && wifiManager.isWifiEnabled() || !wantClose && !wifiManager.isWifiEnabled()) {binding.textviewFirst.append("wifi开启状态:"+wifiManager.isWifiEnabled()+"\n");Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);//startActivityForResult(panelIntent);已过时launcher.launch(panelIntent);}return;
}
这个代码同时演示了获取wifi状态和呼出设置界面。调用此代码即可。
wifiManager.isWifiEnabled()获取wifi状态。
Settings.Panel.ACTION_WIFI 仅打开设置wifi,还有几个不同选项,但是没有针对热点的。
运行效果(界面的下方):

三、获取热点状态
代码如下:
public boolean getWifiApState() {WifiManager wifiManager = (WifiManager) this.getContext().getSystemService(Context.WIFI_SERVICE);if (wifiManager.isWifiEnabled()) {binding.textviewFirst.append("wifi处于开启状态\n");return false;} else binding.textviewFirst.append("wifi处于关闭状态\n");try {Method method = wifiManager.getClass().getMethod("getWifiApState");int i = (Integer) method.invoke(wifiManager);binding.textviewFirst.append("热点状态"+i+"\n");return true;} catch (Exception e) {binding.textviewFirst.append(e.toString());return false;}}
由于getWifiApState()无法直接调用,所以用了invoke。以前的很多设置wifi和热点的代码都是类似这样用,但是现在统统都过时了,手机的权限越收越紧。
(这里是结束)
相关文章:
android开发:安卓13Wifi和热点查看与设置功能
近日对安卓热点功能做了一些技术验证,目的是想利用手机开热点给设备做初始化,用的是安卓13,简言之: 热点设置功能不可用,不可设置SSID和密码,不可程序控制开启关闭,网上的代码统统都过时了Loca…...
Java中的mysql——面试题+答案——第24期
当涉及MySQL时,面试题可以涵盖更多高级主题、安全性和实践经验。 MySQL中的存储引擎InnoDB和MyISAM的区别是什么? 答案: InnoDB支持事务,而MyISAM不支持。InnoDB使用行级锁,而MyISAM使用表级锁。InnoDB支持外键&#x…...
王者小游戏
游戏里的经验动物 Bear package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\辛欣\\OneDrive\\桌面\\王者荣耀图片(1)\\王者荣耀图片\\beast\\bear.jp…...
using meta-SQL 使用元SQL
%DatePart Syntax %DatePart(DTTM_Column) Description The %DatePart meta-SQL variable returns the date portion of the specified DateTime column. DatePart meta-SQL变量返回指定的DateTime列的日期部分。 Note: This meta-SQL variable is not implemented for COBOL. …...
函数式接口
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 咱们今天讨论下函数式接…...
使用shell快速查看电脑曾经连接过的WiFi密码
此方法只能查看以前连接过的wifi名称和对应的密码 查看连接过的WiFi名称netsh wlan show profiles查看具体的WiFi名称netsh wlan show profile name"你的wifi名称" keyclear...
通过亚马逊云科技云存储服务探索云原生应用的威力
文章作者:Libai 欢迎来到我们关于“使用亚马逊云科技云存储服务构建云原生应用”的文章的第一部分。在本文中,我们将深入探讨云原生应用的世界,并探索亚马逊云科技云存储服务在构建和扩展这些应用中的关键作用。 亚马逊云科技开发者社区为开发…...
Boot工程快速启动【Linux】
Boot工程快速启动【Linux】 在idea中打包cd usr/在local文件夹下mkdir app进入app文件夹把打包好的文件(只上传其中的jar)上传到app文件下检查linux中的Java版本,保证和项目的Java 版本保持一致运行 java -jar sp补全***.jar想看效果得查询当…...
三 STM32F4使用Sys_Tick 实现微秒定时器和延时
更多细节参考这篇 1. 什么是时钟以及作用 1.1 什么是时钟 时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏 1.2 时钟对于STM32的作用 指令同步:cpu和内核外设使用时钟信号来进行指令同步数据传输控制: 时钟信号控制数据在内部总…...
唯创知音WT2003H系列MP3录音语音芯片:高精度ADC与DAC,强大IO驱动能力成就音频卓越
在音频领域里,高精度和强大的驱动能力一直是工程师们追求的目标。唯创知音的WT2003H系列MP3录音芯片恰好满足了这一需求,该芯片具备16 bit高精度的ADC及DAC功能,大功率的IO驱动能力,能够直接驱动64mA,为电子产品带来卓…...
记录Windows下安装redis的过程
开源博客项目Blog支持使用EasyCaching组件操作redis等缓存数据库,在继续学习开源博客项目Blog之前,准备先学习redis和EasyCaching组件的基本用法,本文记录在Windows下安装redis的过程。 虽然redis官网文档写着支持Linux、macOS、Windows等…...
7.5 Windows驱动开发:监控Register注册表回调
在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通过这两个函数可以在不劫持内核API的前提下实…...
NC56 XML 报文校验出错一例
好好的上线了、下午开完会告诉我有个凭证没法传入 NC 了。 请求报文如下: <?xml version"1.0" encodingUTF-8?> <ufinterface roottag"voucher" billtype"gl" replace"Y" receiver"10108" sender&q…...
STM32 ADC转换器、串口输出
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么?二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准?2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…...
[MySQL--基础]函数、约束
hello! 这里是欧_aita的频道。 今日语录:不管你觉得自己能做什么,或者你觉得你不能做什么,你都是对的。 祝福语:愿你的程序像太阳一样明亮,给世界带来温暖和光明。 大家可以在评论区畅所欲言,可以指出我的错误…...
企业数字化决策者深度分享
2023年11月18日,数聚股份应邀参加在台州椒江举办的数字中国企业峰会。本次会议中,诸多在企业数字化进程中做出重要贡献的高层管理者分享了各行各业极具引领性、创新性的数字化实践案例、产品和解决方案;数聚股份董事长陈庆华携其前瞻的数字化…...
JMeter压测常见面试问题
1、JMeter可以模拟哪些类型的负载? JMeter可以模拟各种类型的负载,包括但不限于Web应用程序、API、数据库、FTP、SMTP、JMS、SOAP / RESTful Web服务等。这使得JMeter成为一个功能强大且灵活的压力测试工具。 2、如何配置JMeter来进行分布式压力测试&a…...
使用opencv将sRGB格式的图片转换为DCI-P3格式【sRGB】【DCI-P3】
要将图像从 sRGB 格式转换为 DCI-P3 格式,您需要使用适当的线性转换矩阵。在 OpenCV 中,这通常涉及使用色彩转换函数,但 OpenCV 默认情况下不直接支持 sRGB 到 DCI-P3 的转换。因此,您需要手动计算并应用转换矩阵。 转换矩阵取决…...
【协议设计与实现】Linux环境下,如何从0开始设计并实现一个网络协议之一——需要考虑的因素
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:TCP/IP协议&…...
【前端】JS实现SQL格式化
sqlFormatter sql-formatter - npm (npmjs.com) const sqlFormatter require(/utils/sqlFormatter)let sql select count(1) as cnt from t_user where id < 7;// 格式化 // let sqlF sqlFormatter.format(sql);let sqlF sqlFormatter.format(sql, {language:mysql,})…...
视频抠像革命:如何用MatAnyone在5分钟内获得专业级绿幕效果
视频抠像革命:如何用MatAnyone在5分钟内获得专业级绿幕效果 【免费下载链接】MatAnyone [CVPR 2025] MatAnyone: Stable Video Matting with Consistent Memory Propagation 项目地址: https://gitcode.com/gh_mirrors/ma/MatAnyone 还在为视频抠像烦恼吗&am…...
TrafficMonitor插件系统:打造你的个性化Windows系统监控中心
TrafficMonitor插件系统:打造你的个性化Windows系统监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 你是否厌倦了Windows任务栏上分散的系统监控工具&#x…...
include-media插件生态:8个实用插件提升开发效率
include-media插件生态:8个实用插件提升开发效率 【免费下载链接】include-media 📐 Simple, elegant and maintainable media queries in Sass 项目地址: https://gitcode.com/gh_mirrors/in/include-media include-media是一个功能强大的Sass媒…...
三星固件下载神器:Bifrost跨平台解决方案完全指南
三星固件下载神器:Bifrost跨平台解决方案完全指南 【免费下载链接】SamloaderKotlin 项目地址: https://gitcode.com/gh_mirrors/sa/SamloaderKotlin 三星固件下载神器Bifrost(SamloaderKotlin)是一款免费开源的三星官方固件下载工具…...
突破Cursor API限制:cursor-free-vip架构解密与设备指纹重构技术深度解析
突破Cursor API限制:cursor-free-vip架构解密与设备指纹重构技术深度解析 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youv…...
5分钟掌握Hanime1Plugin:构建纯净Android动画观影体验的技术方案
5分钟掌握Hanime1Plugin:构建纯净Android动画观影体验的技术方案 【免费下载链接】Hanime1Plugin Android插件(https://hanime1.me) (NSFW) 项目地址: https://gitcode.com/gh_mirrors/ha/Hanime1Plugin Hanime1Plugin是一款专为Android平台设计的动画观影插…...
避坑指南:JavaCV中FFmpegFrameGrabber处理音频流时,采样格式转换的那些‘坑’
JavaCV音频处理实战:FFmpegFrameGrabber采样格式转换的深度解析 1. 音频采样格式的底层逻辑与核心挑战 在多媒体处理领域,音频采样格式的转换是一个看似简单实则暗藏玄机的技术点。当我们使用JavaCV的FFmpegFrameGrabber处理音频流时,经常会遇…...
如何让AI替你操作浏览器?Midscene Chrome扩展的智能自动化革命
如何让AI替你操作浏览器?Midscene Chrome扩展的智能自动化革命 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否厌倦了每天重复点击、填写、提交…...
3步掌握ModTheSpire:Slay the Spire模组加载终极指南
3步掌握ModTheSpire:Slay the Spire模组加载终极指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是《Slay the Spire》最强大的外部模组加载器,…...
Bypass Paywalls Clean实用指南:解锁付费新闻的技术解析
Bypass Paywalls Clean实用指南:解锁付费新闻的技术解析 在当今信息时代,众多优质新闻媒体设置了付费墙机制,限制了用户对深度内容的访问。Bypass Paywalls Clean作为一款技术解决方案,为读者提供了突破这些限制的可能性。本文将深…...
