wifi热点setting

news/2025/1/13 3:00:56/

1、wifi原生setting的入口在WifiTetherSettings.java

packages/apps/Settings/src/com/android/settings/wifi/tether/WifiTetherSettings.java

  • WifiTetherSettings​​​​​​​层

开启热点和关闭热点的最后是使用ConnectivityManager的 startTethering 和 stopTethering

packages/apps/Settings/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java

    void stopTether() {mSwitchBar.setEnabled(false);mConnectivityManager.stopTethering(TETHERING_WIFI);}void startTether() {mSwitchBar.setEnabled(false);mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));}

  • ConnectivityManager层

frameworks/base/core/java/android/net/ConnectivityManager.java

    public void startTethering(int type, boolean showProvisioningUi,final OnStartTetheringCallback callback, Handler handler) {mTetheringManager.startTethering(request, executor, tetheringCallback);}public void stopTethering(int type) {mTetheringManager.stopTethering(type);}

  • TetheringManager层​​​​​​​

frameworks/base/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java

调用到Tethering

    public void startTethering(@NonNull final TetheringRequest request,@NonNull final Executor executor, @NonNull final StartTetheringCallback callback) {getConnector(c -> c.startTethering(request.getParcel(), callerPkg, listener));}public void stopTethering(@TetheringType final int type) {getConnector(c -> c.stopTethering(type, callerPkg, new IIntResultListener.Stub() {@Overridepublic void onResult(int resultCode) {}}));}

 

  • Tethering层

frameworks/base/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java

最后startTethering调用到最后是WifiManager.startTetheredHotspot,

stopTethering 调用到最后是WifiManager.stopSoftAp

    void startTethering(final TetheringRequestParcel request, final IIntResultListener listener) {mHandler.post(() -> {enableTetheringInternal(request.tetheringType, true /* enabled */, listener);});}private void enableTetheringInternal(int type, boolean enable,final IIntResultListener listener) {int result = TETHER_ERROR_NO_ERROR;switch (type) {case TETHERING_WIFI:result = setWifiTethering(enable);break;case TETHERING_USB:result = setUsbTethering(enable);break;case TETHERING_BLUETOOTH:setBluetoothTethering(enable, listener);break;default:Log.w(TAG, "Invalid tether type.");result = TETHER_ERROR_UNKNOWN_TYPE;}}private int setWifiTethering(final boolean enable) {final WifiManager mgr = getWifiManager();if ((enable && mgr.startTetheredHotspot(null /* use existing softap config */))|| (!enable && mgr.stopSoftAp())) {mWifiTetherRequested = enable;return TETHER_ERROR_NO_ERROR;}}

2、改热点Setting的时候可以直接只编译Settings.apk,并且替换,可以查看Android.bp文件

./system_ext/priv-app/Settings/Settings.apk


http://www.ppmy.cn/news/6128.html

相关文章

[洛谷]【深基16.例3】二叉树深度

一、题目描述 题目描述 有一个 n(n≤106)n(n \le 10^6)n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过 nnn),建立一棵二叉树(根节点的编号为 111),如果是叶子结点,则输入 …

esp8266测试1.44英寸TFT屏(驱动7735)的demo

参考这教程: 使用esp8266点亮福利屏型号st7735的1.44的TFT屏 管脚连接: 我的用的TFT1.44寸ST7735,与NodeMCU针脚接线成功连接 VCC——3V GND——G LED——3V CLK——D5 SDI——D7 RS——D6 RST——D4 CS——D8 这里给出常用的屏幕管脚定义 以及esp8266…

矽昌--Wireless配置简述

Wireless配置简述 1 编译 1.1 首次编译 ​ 如果是第一次编译时就需要添加wifi模块,请检查所需编译版型的配置,配置位于openwrt-18.06/target/linux/siflower/ 文件夹下,例如sf19a28_ac28_fullmask_def.config为ac28版型的配置。 查看配置并…

Qt中实例化一个函数变量时加不加括号的区别,以及括号中的this的使用

一、设计一个测试小程序 废话不多说,直接上代码。 main.h函数就不多说了,没改动。直接上mainwindow.h,也没改动。看mainwindow.cpp的内容。 #include "mainwindow.h" #include "ui_mainwindow.h" #include "test.…

虚函数与纯虚函数

1. 虚函数与纯虚函数 虚函数:在类成员方法的声明(不是定义)语句前加virtual关键字,此函数就变成了虚函数。具体如下: virtual void function set_value();... endfunction用途:主要用于实现多态。在父类中…

三.keepalived介绍及工作原理

keepalived介绍及工作原理keepalived介绍及工作原理一、keepalived的介绍二、Keepalived服务的重要功能1、管理LVS负载均衡软件2、实现对LVS集群节点健康检查功能(healthcheck)3、作为系统网络服务的高可用功能(failover)三、Keep…

QT 学习笔记(十一)

文章目录一、绘图设备1. QPixmap1.1 QPixmap 简介1.2 QPixmap 演示2. QBitmap2.1 QBitmap 简介2.2 QBitmap 演示见 QPixmap 和 QBitmap 的区别。3. QImage3.1 QImage 简介3.2 QImage 演示4. QPicture4.1 QPicture 简介4.2 QPicture 演示二、QPixmap 和 QBitmap 的区别1. widget…

Android基础学习(二十四)—— View绘制

1、Activity.setContentView Activity.setContentView(layoutResID:int)PhoneWindow.setContentView(layoutResID:int)PhoneWindow.installDecor//mContentParent为DecorViewLayoutInflater.inflate(layoutResID:int, mContentParent:ViewGroup)//attachToRoot为 root ! nullL…