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
英文地址,請注明出處:http://en.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;并設…