You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 10系统如何自动创建指定SSID和密码的热点?

LocalOnlyHotspot自定义配置可行性说明

原生Android 8.0及以上系统的公开API中,WifiManager.LocalOnlyHotspot 不支持开发者自定义SSID和密码,系统会默认随机生成格式为AndroidShare_xxxx的SSID和随机WPA2密码,无公开API可修改该配置,属于系统为限制第三方应用随意创建固定热点的安全设计。


可用实现方案

方案1:面向企业/定制设备场景(无需修改现有逻辑)

如果你的应用为企业定制类应用,不需要上架公网应用商店,可通过申请特殊权限直接复用原有逻辑:

  • 给应用申请android.permission.OVERRIDE_WIFI_CONFIG权限,同时将应用使用设备系统签名,或者设置为设备的设备策略控制器(DPC)
  • 权限获取后,可通过反射调用WifiManager未公开的setWifiApConfiguration()方法配置自定义SSID、密码,再调用startSoftAp()启动热点即可,该逻辑完全匹配你现有功能流程,无需修改客户端适配
    示例代码片段:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// 反射获取设置热点配置的方法
Method setConfigMethod = wifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
WifiConfiguration apConfig = new WifiConfiguration();
apConfig.SSID = "\"你需要的固定SSID\"";
apConfig.preSharedKey = "\"你需要的固定密码\"";
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
// 写入配置
setConfigMethod.invoke(wifiManager, apConfig);
// 启动热点
Method startApMethod = wifiManager.getClass().getMethod("startSoftAp", WifiConfiguration.class);
startApMethod.invoke(wifiManager, apConfig);

方案2:面向公网上架应用场景(最小改造成本)

如果你的应用需要上架公网应用商店、无法获取系统级权限,仅需做极小幅度适配即可保留核心FTP传输逻辑:

  1. 调用系统LocalOnlyHotspot API启动热点后,通过LocalOnlyHotspotReservation#getWifiConfiguration()获取系统生成的随机SSID和密码
  2. 针对固定SSID密码的客户端做适配:
    • 若客户端支持蓝牙/NFC近场通信,可将动态生成的热点信息通过近场通信同步给客户端,客户端自动修改连接配置
    • 若客户端为自研嵌入式设备,可给客户端新增前缀匹配+加密校验逻辑:扫描到前缀为你预设字符的热点后,用约定的加密规则校验密码合法性,无需固定SSID
  3. 客户端连接成功后的FTP数据传输逻辑完全不需要修改,整体改造成本极低

方案3:Android 13+专项适配

针对Android 13及以上系统,可使用官方新增的公开API直接配置固定热点,无需系统权限:

  • 申请android.permission.TETHER_PRIVILEGED普通权限,即可通过HotspotConfig类自定义SSID、密码,调用startTetheredHotspot()启动热点即可
    示例代码片段:
val wifiManager = getSystemService(WifiManager::class.java)
val hotspotConfig = HotspotConfig.Builder()
    .setSsid("你的固定SSID")
    .setPassphrase("你的固定密码", WifiManager.KeyMgmt.WPA2_PSK)
    .build()
// 启动热点
wifiManager.startTetheredHotspot(hotspotConfig, Executors.newSingleThreadExecutor(), object : WifiManager.TetheredHotspotCallback() {
    override fun onStarted(hotspotConfig: HotspotConfig) {
        // 热点启动成功
    }
})

内容的提问来源于stack exchange,提问作者Bonemannes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:03