Android wifi热点开关代码记录

Android wifi热点开关代码记录

一、前言

wifi和热点开关的代码可以用WifiManager也可以调用ConnectivityManager的接口实现。

下面记录一下。

二、代码实现

1、wifi开关

    //wifi开关
    public static void setWifiState(Context context, boolean isSetWifiEnable) {
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        int wifiState = mWifiManager.getWifiState();
        DebugLog.debug("wifiState = " + wifiState + "(DISABLING = 0;DISABLED = 1;ENABLING = 2;ENABLED = 3;)");

        DebugLog.debug("set wifi =isSetWifiEnable" + isSetWifiEnable);
        mWifiManager.setWifiEnabled(isSetWifiEnable);
    }

2、热点开关

    //热点开关
    public static void setWifiApState(Context context, boolean isSetWifiApEnable) {
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        int apState = mWifiManager.getWifiApState();
        LogUtil.debug("apState = " + apState + "(DISABLING = 10;DISABLED = 11;ENABLING = 12;ENABLED = 13;)");

        LogUtil.debug("set wifi =isSetWifiApEnable" + isSetWifiApEnable);
        if (isSetWifiApEnable) {
            mWifiManager.startTetheredHotspot(null); //根据可以设置热点配置SoftApConfiguration对象信息
        } else {
            mWifiManager.stopSoftAp();
        }

    }

3、第二种方式开关热点


    //热点关闭2
    public static void stopHotSpot(Context context) {
        LogUtil.debug("stop hotspot.");
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
    }

    //热点开启2
    public static void startHotSpot(Context context, long delaytime) {
        LogUtil.debug("setup hotspot.");
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        int apState = mWifiManager.getWifiApState();
        LogUtil.debug("apState = " + apState + "(DISABLING = 10;DISABLED = 11;ENABLING = 12;ENABLED = 13;)");
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, true /* showProvisioningUi */, mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
    }


    //热点开启回调监听
    final static ConnectivityManager.OnStartTetheringCallback mOnStartTetheringCallback =
            new ConnectivityManager.OnStartTetheringCallback() {
                @Override
                public void onTetheringFailed() {
                    super.onTetheringFailed();
                    LogUtil.error("onTetheringFailed");
                }

                @Override
                public void onTetheringStarted() {
                    super.onTetheringStarted();
                    LogUtil.debug("onTetheringStarted");
                }

            };

具体情况,热点的两种开启控制代码,看哪种方便就用哪种。
上面看起来是使用WifiManager调用的方式比较方便,
虽然官方是提示废弃的,但是系统系统应用还是可以正常调用。

两个对象的方法调用好像都是要系统权限的!所以普通应用基本无法调用!

三、其他

1、热点启动流程

(1)ConnectivityManager.startTethering
(2)TetheringManager.startTethering(request, executor, tetheringCallback)
(3)TetheringService.TetheringConnector.startTethering
(4)Tethering.startTethering(request, listener);
//方法名变化,使用null 对象开启热点
(5)WifiManager.startTetheredHotspot(null /* use existing softap config */)
(6)WifiServiceImpl.startTetheredHotspot(@Nullable SoftApConfiguration softApConfig) 
//方法名再变化
(7)ActiveModeWarden.startSoftAp(apModeConfig);
(8)ActiveModeManager.start();
    ActiveModeManager manager = mWifiInjector.makeSoftApManager(listener, callback, softApConfig);
        listener.setActiveModeManager(manager);
        manager.start();
ActiveModeManager是接口类,会调用到SoftApManager.start()
(9)SoftApManager.startSoftAp()
(10)WifiNative.startSoftAp(mApInterfaceName, localConfigBuilder.build(), mSoftApListener)
(11)HostapdHal.addAccessPoint(ifaceName, config, listener::onFailure)
(12)根据硬件版本调用不同的接口实现:addAccessPoint_X_X

可以看到ConnectivityManager的后续流程也是调用到WifiManager流程往下走。

详解:
https://blog.csdn.net/wenzhi20102321/article/details/128473734

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)

本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

LINUX 实现终端动态进度条记录

1、转义字符 \r \n 的区别 \r 代表回车,他会清空光标所在行设为数据并将该行的内容清除。 \n 代表换行,将光标移动到下一行。 2、ffush的作用 fflush刷新缓存,fflash(stdout),就是将标准输出的缓存输出并清空。 我们知道LINUX中stdout是行…

vue集成高德地图API实现坐标拾取功能

安装与配置: 组件 | vue-amapDescriptionhttps://elemefe.github.io/vue-amap/#/zh-cn/introduction/install简介 | vuemap/vue-amap简介https://vue-amap.guyixi.cn/zh-cn/introduction/introduction.html ​​​​我的应用 | 高德控制台高德开放平台官网控…

C#异步多线程——浅谈async/await底层原理

async/await是块语法糖,编译器帮助我们做了很多工作,下面我们就简单剖析一下async/await的底层原理。 反编译工具ILSpy安装 我用的是ILSpy反编译生成的dll程序集。还没有ILSpy工具的小伙伴可以直接在VS中安装;点击Extensions>Manage Ext…

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

npm的包管理

从哪里下载包 国外有一家 IT 公司,叫做 npm,Inc.这家公司旗下有一个非常著名的网站: https://www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心!到目前位置,全球约…

【python】OpenCV—Extract Horizontal and Vertical Lines—Morphology

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考 更多有趣的代码示例,可参考【Programming】 1、功能描述 基于 opencv-python 库,利用形态学的腐蚀和膨胀,提取图片中的水平或者竖直线条 2、代码实现 导入基本的库函数 im…

《Keras 3 在 TPU 上的肺炎分类》

Keras 3 在 TPU 上的肺炎分类 作者:Amy MiHyun Jang创建日期:2020/07/28最后修改时间:2024/02/12描述:TPU 上的医学图像分类。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 简介 设置 本教程将介…

CSS认识与实践

目录 CSS 是什么 基本语法规范 引入方式 内部样式表 行内样式表 外部样式 空格规范 选择器 选择器的功能 选择器的种类 基础选择器 标签选择器 类选择器 id 选择器 通配符选择器 基础选择器小结 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 复合…

Windows环境:使用命令行脚本批量发送http请求

因为服务器Windows版本问题,无法使用curl,所以只能使用wget。 C:\Windows\System32\wget.exe 需求背景: 传入客户端参数,请求服务端。 将请求参数保存到文本文件中,命令行读取文本文件,然后分割字符串&am…

Logback日志技术

Logback日志技术 日志 日志(Logging)是软件开发和运维中用于记录系统或应用程序运行期间发生的运行信息、状态变化、错误信息等的一种机制,这种记录的方式就好像我们日常生活中写日记一样。它提供了一种持久化的方式,使得开发者…

6. 快速掌握抽象类及接口

目录 1. 抽象类1.1 抽象类语法1.2 抽象类特性1.3 抽象类的作用 2. 接口2.1 接口语法2.2 接口的特性 3. 接口案例4. 常用接口4.1 Comparable接口---compareTo()方法4.2 clonable接口---clone方法4.2 深拷贝和浅拷贝 5. Object类5.1 equals()方法5.2 toString()方法5.3 hashCode(…

womb子宫一词解趣

英语单词 womb,是“子宫”的意思,这个单词非常有趣,下面我们来说说它有趣在什么地方。 首先,womb 这个单词,大体可以分成两个部分,即wom-和b-,其中wom-可对应子宫的子,b-可对应子宫…

Spring Cloud概述

(一)定义 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一套完整的解决方案…

年后找工作需要注意的事项

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…

windows远程桌面连接限定ip

1,Windows防火墙->高级设置->远程桌面 - 用户模式(TCP-In)->作用域->远程IP地址 2,启用规则

电脑换固态硬盘

参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…

3.无重复字符的最长字串--力扣

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…

西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】

AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中,我们将引导你完成安装Go编程语言和Gin框架的过程,Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中,本指南是高效而强大的web开发路线图。 安装…