Conéctese a wifi sin Internet mediante programación

Estoy usando el siguiente código para conectarse a una red WiFi sin conexión a Internet, ya que aloja su propio servidor web donde quiero conectar incluso si no hay conexión a Internet disponible.

WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = String.format("\"%s\"", scanResult.SSID); wifiConfiguration.preSharedKey = String.format("\"%s\"", "secret"); int netId = wifiManager.addNetwork(wifiConfiguration) wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); 

Esto funciona bien en todos los dispositivos de Android Marshmallow (estoy usando CM13, por lo que es posible que se relaciona con CyanogenMod?): Cuando uso este código para conectarse, Android todavía utiliza la conexión móvil y marcar el símbolo WiFi con un signo de exclamación. Segundos después muestra una notificación con la pregunta si quiero permanecer conectado, porque la red no tiene conexión a Internet.

Problema: Mi aplicación intenta conectarse automáticamente a mi servidor web que falla, ya que obviamente no hay conexión a Internet. Por supuesto, sería posible esperar hasta que pueda llegar a mi servidor web, pero debería funcionar sin la interacción del usuario.

¿Cómo soluciona ChromeCast o cualquier otro dispositivo IoT ? Nunca vi una notificación como esta cuando estaba configurando mi dispositivo ChromeCast.

One Solution collect form web for “Conéctese a wifi sin Internet mediante programación”

Resolví esto vinculando ( connectivityManager.bindProcessToNetwork(network); ) el proceso actual a la red conectada. Esto evita que el cuadro de diálogo "siga usando esta red" y le permita comunicarse con el dispositivo a través de wifi.

 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) { if (Build.VERSION.RELEASE.equalsIgnoreCase("6.0")) { if (!Settings.System.canWrite(mActivity)) { Intent goToSettings = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); goToSettings.setData(Uri.parse("package:" + mActivity.getPackageName())); mActivity.startActivity(goToSettings); } } connectivityManager.bindProcessToNetwork(null); if (mSsid.contains("my_iot_device-xxxxxxxxx")) { connectivityManager.bindProcessToNetwork(network); } else { } } else { //This method was deprecated in API level 23 ConnectivityManager.setProcessDefaultNetwork(null); if (mSsid.contains("my_iot_device-xxxxxxxxx")) { ConnectivityManager.setProcessDefaultNetwork(network); } else { } } try { //do a callback or something else to alert your code that it's ok to send the message through socket now } catch (Exception e) { Crashlytics.logException(e); e.printStackTrace(); } connectivityManager.unregisterNetworkCallback(this); } }); } 
  • Android Personalizar la exploración Wifi
  • Conexión WiFi de Android mediante programación
  • Android tethering, cómo deshabilitar dhcp
  • ADB, Wifi y Eclipse: ¿cómo puedo configurar?
  • Solicitar al usuario que active Wi-Fi
  • Establecer la configuración de IP de Android, DNS, GATEWAY mediante programación
  • Android WiFiManager.getScanResults () no devuelve datos SSID ocultos
  • Android - Get Notified cuando se detecta un nuevo punto de acceso?
  • Problema al conectar la aplicación de Android al socket mediante la conexión de celda
  • Android Compruebe si hay WiFi pero no Internet
  • Cómo obtener la dirección IP del router wifi conectado en android mediante programación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.