当前位置: 首页 > article >正文

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


http://www.kler.cn/a/508029.html

相关文章:

  • 构建一个简单的深度学习模型
  • ICC和GCC编译器编译Openmp程序的运行区别
  • .Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
  • 使用 Docker 部署 Java 项目(通俗易懂)
  • SpringBoot集成Mqtt服务实现消费发布和接收消费
  • PyTorch使用教程(1)—PyTorch简介
  • 代码随想录算法训练营第三十五天-动态规划-01背包(一维)
  • 敏感信息数据搜集系统全英文
  • 【MySQL】表操作
  • C语言的语法糖
  • IvorySQL 4.2 发布
  • 25/1/17 嵌入式笔记 STM32F103
  • 利用.NET版Word处理控件Aspose.Words,使用 C# 在 Word 中创建图表
  • MySQL SQL优化技巧与原理
  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三
  • 如何实现圆形头像效果
  • 基于TypeScript封装 `axios` 请求工具详解
  • openharmony测试子系统
  • 【React】函数组件底层渲染机制
  • 【2024年华为OD机试】 (B卷,200分)- 二叉树中序遍历(Java JS PythonC/C++)
  • GIFT ICA 下载记录
  • Flink的优化技巧
  • 力扣-数据结构-21【算法学习day.92】
  • 如何选择适合特定项目需求的人工智能学习框架?
  • python-44-嵌入式数据库SQLite和DuckDB
  • SQL-杂记1