Android 热点开发的相关api总结

Android 热点 

一、前言

热点开发属于系统级功能开发,涉及的核心 API 多为系统签名权限保护(如android.permission.TETHER_PRIVILEGED),通常仅系统应用(如 Settings)可正常调用。
实际开发中,除基础的开关、配置功能外,可能需要扩展自定义信道设置、频段切换等 Settings 未涵盖的功能。本文总结热点开发的核心流程、调试技巧及版本适配要点

二、热点开发

1、开关和默认配置

(1)核心 API(分版本)
  • Android 13 及以上:推荐使用ConnectivityManagerTetheringManager的公开 API,支持回调监听状态:

    // 开启热点
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    TetheringManager tetheringManager = connectivityManager.getTetheringManager();
    tetheringManager.startTethering(TetheringManager.TETHERING_WIFI,ContextCompat.getMainExecutor(context),new TetheringManager.StartTetheringCallback() {@Overridepublic void onTetheringStarted() { /* 开启成功 */ }@Overridepublic void onTetheringFailed() { /* 开启失败 */ }}
    );// 关闭热点
    tetheringManager.stopTethering(TetheringManager.TETHERING_WIFI);
    
  • Android 11-12:可使用WifiManagerstartTetheredHotspot(需系统签名):

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    // 开启(使用现有配置)
    wifiManager.startTetheredHotspot(null); 
    // 关闭
    wifiManager.stopTetheredHotspot();
    
(2)配置信息设置

通过SoftApConfiguration配置热点参数(SSID、密码、频段、信道等),需注意配置修改后需重启热点才能生效

private SoftApConfiguration buildConfig() {SoftApConfiguration.Builder builder = new SoftApConfiguration.Builder();builder.setSsid("MyHotspot"); // 热点名称// 加密类型:0=无密码(OPEN),1=WPA2-PSKbuilder.setPassphrase("12345678", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); // 频段与信道(必须匹配,否则开启失败)// 2.4G频段(band=1):信道1-14;5G频段(band=2):信道36-165builder.setChannel(6, 1); // 2.4G信道6return builder.build();
}// 应用配置
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setSoftApConfiguration(buildConfig());

2、主要流程

热点开启的核心调用链

1. ConnectivityManager.startTethering() → 触发 tethering 服务请求  
2. TetheringManager.startTethering() → 管理 tethering 状态与权限校验  
3. TetheringService.startTethering() → 系统服务层处理请求  
4. WifiManager.startTetheredHotspot() → 调用WiFi服务开启热点  
5. WifiServiceImpl.startTetheredHotspot() → 实现热点启动逻辑  
6. ActiveModeWarden.startSoftAp() → 管理活跃模式(AP模式)  
7. SoftApManager.start() → 构建AP配置并调用底层  
8. WifiNative.startSoftAp() → 与WiFi HAL交互  
9. HostapdHal.addAccessPoint() → 调用硬件抽象层接口,启动hostapd进程  

关键节点SoftApManager负责 AP 配置转换,HostapdHal对接硬件驱动,若某环节日志缺失,需重点排查对应层问题(如权限、硬件支持)。

3、相关日志

调试热点问题时,需重点关注以下日志关键字和过滤命令:

日志类型关键字 / 进程名过滤命令示例
Framework 层SoftApManagerWifiService`logcatgrep -iE "SoftApManagerWifiService"`
底层服务hostapdwpa_supplicant`logcatgrep -i hostapd`
HAL 与驱动交互WifiNativeWifiHAL`logcatgrep -i WifiNative`
网络接口wlanap0(接口名)`logcatgrep -i wlan1`

常见错误日志分析

  • Failed to start softap: invalid channel:信道与频段不匹配(如 5G 频段用了 2.4G 信道)。
  • SecurityException: Not allowed to start tethering:缺少系统签名或TETHER_PRIVILEGED权限。
  • hostapd: Failed to set channel:硬件不支持该信道(需检查设备支持的频段范围)。

4、相关广播

热点状态变化的核心广播为WifiManager.WIFI_AP_STATE_CHANGED_ACTION,可监听开关过程:

private BroadcastReceiver hotspotReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) {int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, -1);switch (state) {case WifiManager.WIFI_AP_STATE_ENABLED:Log.d(TAG, "热点已开启");// 可在此处获取热点IP(通过NetworkInterface)break;case WifiManager.WIFI_AP_STATE_FAILED:Log.e(TAG, "热点开启失败");break;// 其他状态:开启中(WIFI_AP_STATE_ENABLING)、关闭中(WIFI_AP_STATE_DISABLING)、已关闭(WIFI_AP_STATE_DISABLED)}}}
};// 注册广播
IntentFilter filter = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
context.registerReceiver(hotspotReceiver, filter);

三、其他

1、Android 热点开发调试小结

  • 权限依赖:必须为系统应用(安装在/system/priv-app)并使用系统签名,还需要导入framwork包;
  • 硬件限制:频段和信道支持依赖 WiFi 芯片,需通过WifiManager.getConfiguredNetworks()或底层日志确认设备能力。
// 依赖ZXing库:implementation 'com.google.zxing:core:3.5.0'
private Bitmap generateHotspotQrCode(String ssid, String password) {// 二维码内容格式:WIFI:S:热点名;T:加密类型(WPA/WEP/OPEN);P:密码;;String content = "WIFI:S:" + ssid + ";T:WPA;P:" + password + ";;";MultiFormatWriter writer = new MultiFormatWriter();try {BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 300, 300, // 二维码宽高new HashMap<>());// 转换BitMatrix为Bitmapint width = matrix.getWidth();int height = matrix.getHeight();Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {bitmap.setPixel(x, y, matrix[x][y] ? Color.BLACK : Color.WHITE);}}return bitmap;} catch (WriterException e) {e.printStackTrace();return null;}
}

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

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

相关文章

Claude Code 使用指南

Claude Code 使用指南 在 AI 辅助编程领域&#xff0c;我们正经历从简单的代码补全到能够自主执行复杂任务的“智能体”&#xff08;Agent&#xff09;的深刻变革。Claude Code 正是这一变革的杰出代表。它并非一个简单的问答机器人&#xff0c;而是一个设计精密的编程协作系统…

Spring Boot常用注解-详细解析+示例

1. SpringBootApplication详细解析&#xff1a;组合注解&#xff0c;包含Configuration&#xff08;标记配置类&#xff09;、EnableAutoConfiguration&#xff08;开启自动配置&#xff09;、ComponentScan&#xff08;组件扫描&#xff09;。启动类标注后&#xff0c;Spring …

基于原神游戏物品系统小demo制作思路

概述 本文介绍了一个基于C的游戏物品与角色管理系统&#xff0c;该系统实现了游戏中的物品分类、角色属性管理、队伍组建以及背包物品使用等功能。该系统采用面向对象的设计原则&#xff0c;通过继承和多态实现了可扩展的物品效果系统。 系统架构 1. 物品类型系统 系统定义了三…

Grounded-Segment-Anything 环境配置

Grounded-Segment-Anything 环境配置Grounded-Segment-Anything 介绍环境配置Install osx&#xff08;非必须&#xff09;:Install RAM & Tag2Text:报错 module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean: ‘zipimporter‘?运行输出分割文本提示检测远…

ZYNQ 定时器

一、ZYNQ定时器简介 每个Cortex-A9处理器都有自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些计时器的时钟始终为CPU频率&#xff08;CPU_3x2x&#xff09;的1/2。在系统级&#xff0c;有一个24位看门狗定时器和两个16位三重定时器/计数器。系…

Java8 Comparator接口 和 List Steam 排序使用案例

在Java中&#xff0c;Comparator接口主要用于实现自定义排序逻辑&#xff0c;适用于未实现Comparable接口或需要覆盖默认比较规则的场景。以下是核心使用方法和注意事项&#xff1a;一、基础用法‌匿名内部类实现‌传统方式通过匿名内部类重写compare()方法&#xff0c;例如对整…

word2vec模型案例

代码实现&#xff1a;import torch.optim as optim from tqdm import tqdm, trange import numpy as np import torch from torch import nn import torch.nn.functional as FCONTEXT_SIZE 2raw_text """We are about to study the idea of a computational p…

< 自用文 OS 有关 > (续)发现正在被攻击 后的自救 Fail2ban + IPset + UFW 工作流程详解

继上编&#xff1a;&#xff1c; 自用文 主机 USC 记录&#xff1a;&#xff1e; 发现正在被攻击 后的自救-CSDN博客 环境&#xff1a; 改进&#xff1a; 以下是把代码&#xff0c;懒得写&#xff0c;扔给了 AI &#xff0c;让它出的&#xff1a; Fail2ban IPset UFW 工作…

Linux —— 虚拟进程地址空间

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录虚…

简单聊一聊js

JavaScript 是一种高级的、解释型的编程语言。它是现代 Web 开发的三大核心基石之一&#xff0c;与 HTML 和 CSS 并列。​HTML​&#xff1a;负责网页的结构和内容​&#xff08;如标题、段落、图片&#xff09;。​CSS​&#xff1a;负责网页的样式和布局​&#xff08;如颜色…

造粒机cad+设计说明书

摘要 随着现代化工业的快速发展&#xff0c;生产出大量的固体废弃物。这些废弃物对环境造成了很大的污染&#xff0c;因此需要采取有效的措施进行处理。机械强压式造粒机就是一种非常有效的处理工具&#xff0c;它可以将废渣、废料、饲料和化肥等材料通过机械强力挤压&#xff…

第五课 C#语言基本元素概览,初始类型,变量与方法,算法简介

熟悉C#语言要求&#xff1a;对构成C#语言的基本元素&#xff0c;随便拿出一个你都认识&#xff0c;对于常见基本元素&#xff0c;都能正确使用它 精通C#语言要求&#xff1a;对于构成C#语言的基本元素&#xff0c;随便拿出一个都会使用&#xff0c;对于常用基本元素&#xff0…

LLM学习:大模型基础——视觉大模型以及autodl使用

1、常见的VLM 在大模型中,VLM 是视觉语言模型(Vision-Language Model)的缩写,是一种多模态、生成式 AI 模型,能够理解和处理视频、图像和文本。 VLM 通过将大语言模型(LLM)与视觉编码器相结合构建而成,使 LLM 具有 “看” 的能力,从而可以处理并提供对提示中的…

Vue—路由配置中设置了meta.title,但页面标题仍然显示为“Vite App“?【让我来看看~】

路由配置中明明设置了meta.title&#xff0c;但是页面标题仍然显示为"Vite App"&#xff1f;这是因为仅仅在路由配置中设置meta.title是不够的&#xff0c;还需要在路由守卫中动态设置页面标题。需要做以下几件事来正确设置页面标题&#xff1a;1.首先更新HTML文件的…

【机器学习】综合实训(二)

项目五 电影评分预测【教学内容】使用 MovieLens 数据集&#xff0c;训练一个模型预测用户对电影的评分。主要有以下几个知识点&#xff1a;&#xff08;1&#xff09;数据加载与探索性分析&#xff08;EDA&#xff09;。&#xff08;2&#xff09;处理稀疏数据&#xff08;如用…

STM32 UART + DMA + 空闲中断使用中的帧错误(FE)问题及解决方案

STM32 UART + DMA + IDLE中断使用中的帧错误(FE)问题及解决方案 在我调试STM32H7串口空闲中断DMA接受时遇到了一个bug,这个现象发生在系统刚上电时,有个串口由于帧错误FE挂起了中断,之后在HAL_UART_IRQHandler这个全局中断处理函数结束后,所有的中断使能标志位都被清除了,经过…

TDengine 选择函数 BOTTOM() 用户手册

BOTTOM() 函数用户手册 函数定义 BOTTOM(expr, k)功能说明 BOTTOM() 函数统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样&#xff0c;全部取用又会超出 k 条限制时&#xff0c;系统会从相同值中随机选取符合要求的数量返回。 返回值 数据类型: 同应用…

西门子 S7-200 SMART PLC 实现星三角降压启动控制:原理、案例与完整程序

在工业控制场景中&#xff0c;中型异步电机直接启动时会产生远超额定电流的冲击电流&#xff08;通常为额定电流的 5-7 倍&#xff09;&#xff0c;不仅会影响电网稳定性&#xff0c;还可能对机械设备造成损伤。星三角&#xff08;Y-Δ&#xff09;降压启动是解决这一问题的经典…

【Android】View 的基础知识

【Android】View 的基础知识 1. 什么是 View&#xff1f; View 是 Android 中所有UI组件的基础类。它表示屏幕上的一个矩形区域&#xff0c;负责绘制内容和处理用户交互事件。所有的 UI 组件&#xff08;如按钮、文本框等&#xff09;都是 View 的子类&#xff0c;而 ViewGroup…

西门子 S7-200 SMART PLC 实现电机点动与连续运行综合控制

在工业生产中&#xff0c;电机控制并非单一模式&#xff1a;调试设备时需要 “按动即转、松开即停” 的点动功能&#xff0c;正常生产时则需要 “一键启动、持续运行” 的连续控制。本文以西门子 S7-200 SMART PLC 为载体&#xff0c;详细讲解电机点动控制原理&#xff0c;并设…