Forzar Android a utilizar la red Wifi sin Internet

Estoy construyendo una aplicación para Android que necesita comunicarse a través de una red WiFi que no tendrá acceso a Internet. El problema es que incluso cuando el WiFi está conectado, android elige utilizar datos celulares / móviles cuando no hay conexión a internet en la red wifi.

He leído muchos mensajes sobre el tema, muchos de los cuales implican el enraizamiento del dispositivo, pero eso no es posible con una aplicación de producción (dispositivos de enraizamiento no es una opción). otra solución (como mi código abajo) sugiero usar bindProcessToNetwork() que funciona perfectamente en mi Sony Z2, pero no en otros dispositivos que he probado en (todos los que ejecutan 6.0.1)

 private void bindToNetwork() { final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new NetworkRequest.Builder(); //set the transport type do WIFI builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { connectivityManager.bindProcessToNetwork(null); if (barCodeData.getSsid().contains("screenspace")) { connectivityManager.bindProcessToNetwork(network); } } else { //This method was deprecated in API level 23 ConnectivityManager.setProcessDefaultNetwork(null); if (barCodeData.getSsid().contains("screenspace")) { ConnectivityManager.setProcessDefaultNetwork(network); } } connectivityManager.unregisterNetworkCallback(this); } }); } } 

¿Podría intentar establecer el valor global captive_portal_detection_enabled a 0 (false).

Lo que realmente sucede es que por defecto, cada vez que se conecta a un wifi, el FW probará contra un servidor (normalmente google) para ver si es un wifi cautivo (necesita acceso). Así que si su wifi no está conectado a google, esta comprobación fallará. Después de eso, el dispositivo sabe que el wifi no tiene conexión a Internet y simplemente no se conecta automáticamente a él.

Al establecer esta configuración en 0, se evitará esta comprobación.

Programatically: Settings.Global.putInt(getContentResolver(), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 0);

Editar: Es posible que deba usar la cadena "captive_portal_detection_enabled" directamente, en lugar de la constante que no es visible dependiendo de la versión de Android.

usted necesitaría inhabilitar datos móviles en los ajustes (no seguro, si esto se puede hacer programmatically, que podría ser una opción posible) – o quite el USIM;

de lo contrario el comportamiento común es que siempre se recurrirá a la mejor conexión disponible (mientras que una conexión con pasarela de Internet podría ser preferido, ya que es utilizado por la mayoría de la aplicación).

también vea esta respuesta .

Usted puede comprobar si wifi está conectado a continuación, proceder de otro modo mostrar un diálogo al usuario pidiéndole que se conecte a una red wifi

Dado que el método NetworkInfo.isConnected () ahora está obsoleto en API-23, aquí hay un método que detecta si el adaptador Wi-Fi está conectado y también está conectado a un punto de acceso usando WifiManager:

 private boolean checkWifiOnAndConnected() { WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE); if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); if( wifiInfo.getNetworkId() == -1 ){ return false; // Not connected to an access point } return true; // Connected to an access point } else { return false; // Wi-Fi adapter is OFF } } 
  • Analizar todos los dispositivos wifi cerca del teléfono
  • Cómo abrir navegador predeterminado de cautivo en Android
  • Wake lock no parece funcionar
  • ¿Cómo obtener la seguridad WiFi (NINGUNA, WEP, WPA, WPA2) de Android WifiConfiguration entrada?
  • ¿Qué pasará con las conexiones existentes cuando cambie entre 3g / wifi
  • Android 4.2.2 Wifi-Direct adhoc network - acceder a métodos ocultos android para establecer el SSID y contraseña?
  • Compartir ajustes WiFi como QR-Code para WPA2 Enterprise
  • ¿Cómo comprobar si un dispositivo androide está equipado con un adaptador wifi?
  • Android Ethernet y Wi-Fi al mismo tiempo
  • ¿Pueden funcionar wifi y 3G al mismo tiempo en Android?
  • Android: Activar / desactivar WiFi Hotspot mediante programación en Android Marshmallow (6.0)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.