Solución:
¿Podría intentar establecer la configuración global captive_portal_detection_enabled en 0 (falso)?
Lo que realmente está sucediendo es que, de manera predeterminada, cada vez que se conecta a una red wifi, el FW lo probará con un servidor (generalmente Google) para ver si es una red wifi cautiva (necesita iniciar sesión). Entonces, si su wifi no está conectado a Google, esta verificación fallará. Después de eso, el dispositivo sabe que wifi no tiene conexión a Internet y simplemente no se conectará automáticamente.
Establecer esta configuración en 0 evitará esta comprobación.
Programáticamente Settings.Global.putInt(getContentResolver(), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 0);
Puede hacerlo a través de adb con fines de prueba:
adb shell settings put global captive_portal_detection_enabled 0
Y recupere su valor así:
adb shell settings list global | grep "captive"
En mi humilde opinión, esto no es algo muy agradable de hacer, ya que está cambiando una configuración para el usuario y muchos FW no proporcionan ni siquiera una configuración avanzada para habilitar / deshabilitar esto por el propio usuario. (Google no lo hace). Pero tal vez se adapte a tus necesidades.
¡Espero eso ayude!