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

Android设备无法持续连接Soft Ap模式下ESP8266的解决方案咨询

解决方案

1. 用Android 10+的网络绑定API锁定连接

虽然直接强制连接SSID的API被废弃,但可以通过ConnectivityManager的网络请求与绑定机制,让应用专属使用ESP的WiFi网络:

  • 先通过WifiManager生成目标ESP的网络描述符,指定SSID和加密信息
  • 构建NetworkRequest并注册回调,当ESP网络可用时,将应用进程绑定到该网络
  • 核心代码示例:
val wifiManager = getSystemService(WIFI_SERVICE) as WifiManager
val specifier = WifiNetworkSpecifier.Builder()
    .setSsid("ESP_SCALE_AP")
    .setWpa2Passphrase("your_ap_password") // 开放网络可省略这行
    .build()

val networkRequest = NetworkRequest.Builder()
    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
    .setNetworkSpecifier(specifier)
    .build()

val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        // 将当前应用绑定到ESP的WiFi网络
        connectivityManager.bindProcessToNetwork(network)
    }
}

connectivityManager.requestNetwork(networkRequest, networkCallback)

注意要申请ACCESS_FINE_LOCATION(Android 10+扫描WiFi必需)和CHANGE_NETWORK_STATE权限。

2. 给ESP软AP添加虚假联网响应(欺骗系统)

Android会自动检测WiFi是否能访问互联网,我们可以在ESP上模拟联网成功的响应:

  • 在ESP的SoftAP代码中,搭建一个简单的HTTP服务器,拦截系统的联网检测请求(比如/generate_204、/connecttest.txt这些路径),返回200 OK的响应
  • 让系统误以为该WiFi有互联网,从而不会自动切换网络
  • ESP代码片段示例:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);

void handleNetworkCheck() {
    server.send(200, "text/plain", "OK");
}

void setup() {
    WiFi.softAP("ESP_SCALE_AP", "your_ap_password");
    IPAddress apIP(192, 168, 4, 1);
    WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
    
    // 拦截常见的联网检测路径
    server.on("/generate_204", handleNetworkCheck);
    server.on("/gen_204", handleNetworkCheck);
    server.on("/connecttest.txt", handleNetworkCheck);
    server.begin();
}

void loop() {
    server.handleClient();
}

这个方案实现成本低,对Android设备的兼容性也很好。

3. Android 12+可选:用WiFi感知连接

如果目标设备是Android 12及以上,可以利用WiFi Aware(WiFi感知)功能连接ESP,这种连接的优先级更高,系统不会轻易切换。但需要ESP设备支持WiFi Aware(如部分ESP32型号)。

4. 临时应急:禁用移动数据

在应用连接ESP的时间段内,通过ConnectivityManager临时禁用移动数据,完成数据拉取后再恢复。这个方案体验一般,仅适合应急场景。

是否要切换蓝牙方案?

如果上述WiFi方案都无法解决问题,蓝牙确实是更稳定的替代选项:

  • 蓝牙连接不依赖WiFi,不存在系统自动切换网络的问题
  • BLE(蓝牙低功耗)适配体重秤这种低数据量、低功耗的场景
  • Android从4.3开始就支持BLE,适配范围广

但如果已经在WiFi方案上投入较多精力,优先尝试前两种方案,尤其是第二种欺骗系统的方法,效果直接且改动量小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:15:31