Android11热点启动和关闭

2024-05-24 09:44
文章标签 启动 关闭 热点 android11

本文主要是介绍Android11热点启动和关闭,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android官方关于Wi-Fi Hotspot (Soft AP) 的文章:https://source.android.com/docs/core/connect/wifi-softap?hl=zh-cn

Android 11WifiManager类中有一套系统 API 可以控制热点的开和关,代码如下:

开启热点:

val builder = SoftApConfiguration.Builder()
builder.setSsid("30666")
builder.setPassphrase("99999999", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
val softApConfig = builder.build()val success = wifiManager.startTetheredHotspot(softApConfig)// 或者:
val success = wifiManager.startSoftAp(softApConfig)

停止热点:

val success = wifiManager.stopSoftAp()

对于startTetheredHotspotstartSoftAp的区别,通义千问的答案如下:
在这里插入图片描述

SoftApConfiguration.BuilderstartTetheredHotspotstartSoftApstopSoftAp

这些API都被@SystemApi注解所标注,所以我们无法直接调用,只能通过反射来调用,而且这些API需要一个权限,这个权限需要系统签名的应用才可以使用,权限如下:

<uses-permission android:name="android.permission.NETWORK_STACK"/>

反射调用示例代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {// val builder = SoftApConfiguration.Builder() // 创建 SoftApConfiguration.Builder 对象val builderClass = Class.forName("android.net.wifi.SoftApConfiguration\$Builder")val builder = builderClass.newInstance()Log.i("ABCD","builder = $builder")// builder.setSsid("30666") 设置热点的 SSID(名称)val setSsidMethod = builderClass.getMethod("setSsid", String::class.java)setSsidMethod.invoke(builder, ssid)// builder.setPassphrase("99999999", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) 设置热点的密码val setPassphraseMethod = builderClass.getMethod("setPassphrase", String::class.java, Int::class.javaPrimitiveType)setPassphraseMethod.invoke(builder, password, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)// builder.build() 构建 SoftApConfiguration 对象val buildMethod = builderClass.getMethod("build")val softApConfig = buildMethod.invoke(builder) as SoftApConfiguration// wifiManager.startSoftAp(softApConfig) 启动热点val startSoftApMethod = WifiManager::class.java.getMethod("startSoftAp", SoftApConfiguration::class.java)val success = startSoftApMethod.invoke(wifiManager, softApConfig) as Booleanif (success) {Toast.makeText(this, "Soft AP start successfully", Toast.LENGTH_SHORT).show()} else {Toast.makeText(this, "Failed to start Soft AP", Toast.LENGTH_SHORT).show()}
}

忘记哪个API是30才出的了,所以做了一个版本上的判断,Android R为Android 11版本。

对于启动热点,可用 WifiManager 中的 setWifiApEnabledstartSoftApstartTetheredHotspot,或者 ConnectivityManagerstartTetheredHotspot,其中,ConnectivityManagerstartTethering 只负责启动或关闭热点,对于热点名称密码等的一些配置要用WifiManagersetWifiApConfiguration函数。在ChatGPT中问这几个函数的区别时,答案如下:

  1. setWifiApEnabled

    • 作用: 启用或禁用 Wi-Fi 热点。

    • 参数:

      • wifiConfiguration: 配置热点的 WifiConfiguration 对象。
      • enabled: 一个布尔值,用于指示是否启用热点。
    • 使用情况:这是较早版本的 API(从 API 级别 8 开始)。但从 Android O(API 26)开始,此方法已被弃用,不推荐使用。

    • 示例代码:

      WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
      WifiConfiguration wifiConfig = new WifiConfiguration();
      wifiConfig.SSID = "MyHotspot";
      wifiConfig.preSharedKey = "password";
      wifiManager.setWifiApEnabled(wifiConfig, true);
      
  2. startSoftAp

    • 作用: 启动一个软件热点(Soft AP)。

    • 参数:

      • softApConfiguration: 配置热点的 SoftApConfiguration 对象。
    • 使用情况:这是从 Android O(API 26)开始引入的方法,用于替代 setWifiApEnabled。这个方法更加灵活和现代化,允许更详细的热点配置。

    • 示例代码:

      WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
      SoftApConfiguration.Builder builder = new SoftApConfiguration.Builder();
      builder.setSsid("MyHotspot");
      builder.setPassphrase("password", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
      SoftApConfiguration config = builder.build();
      wifiManager.startSoftAp(config);
      
  3. startTetheredHotspot

    • 作用: 启动一个软件热点(Soft AP)。

    • 参数:

      • softApConfiguration: 配置热点的 SoftApConfiguration 对象。
    • 使用情况:

    • 示例代码:

      val builder = SoftApConfiguration.Builder()
      builder.setSsid("30666")
      builder.setPassphrase("99999999", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
      val softApConfig = builder.build()
      val success = wifiManager.startTetheredHotspot(softApConfig)
      

直接访问系统API

问了一下GPT,说是把自己的应用配置为系统应用即可,不只是加系统签名,还需要把应用拷贝到/system/priv-app/目录,这样手机连接Android Studio后估计就能识别你这个app在这个手机上是一个系统级app,此时可能就会直接让你访问系统API了,这有时间需要验证一下,还有如果验证是对的,然后我们再把app从/system/priv-app/中删除,然后直接运行app,看是否还能正常运行,即使调用系统API的代码报错是否还能正常运行,这也需要验证一下。

把apk转为系统应用步骤如下:

adb root // 需要有root权限
adb remount
adb push /path/to/your/app.apk /system/priv-app/YourApp.apk
adb shell chmod 644 /system/priv-app/YourApp.apk  // 设置适当的权限
adb reboot

这篇关于Android11热点启动和关闭的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998053

相关文章

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat