title: android studio 1.5.1, marshmallow no internet access detected won't automatically reconnect
body: <p>I'm having this <a href="https://stackoverflow.com/questions/34191536/android-marshmallow-how-to-avoid-wi-fi-drop-if-no-internet-access">problem</a> on some 2013 Nexus 7's. </p>
  
  <p>got some code to work (please see below). </p>
  
  <pre><code>package acme.wifi;
  import android.content.*;
  import android.net.wifi.*;
  import android.os.Bundle;
  import android.support.design.widget.FloatingActionButton;
  import android.support.design.widget.Snackbar;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.Toolbar;
  import android.view.View;
  import android.view.Menu;
  import android.view.MenuItem;
  
  import java.math.*;
  import java.net.*;
  import java.nio.*;
  import java.util.*;
  public class MainActivity extends AppCompatActivity {
      void retry() {
          WifiManager wifiMan=(WifiManager)getSystemService(Context.WIFI_SERVICE);
          WifiInfo wifiInf;
          int ipAddress;
          List&lt;WifiConfiguration&gt; wifiConfigurations=wifiMan.getConfiguredNetworks();
          System.out.println("wifi configurations (all): "+wifiConfigurations.size());
          for(WifiConfiguration wifiConfiguration : wifiConfigurations) {
              if(wifiConfiguration.toString().contains("192.168.0.")) {
                  System.out.println("found our network: "+wifiConfiguration.toString());
                  System.out.println("SSID: "+wifiConfiguration.SSID);
                  System.out.println("wifi configuration status is disabled: "+(wifiConfiguration.status==WifiConfiguration.Status.DISABLED));
                  int networkId=wifiConfiguration.networkId;
                  boolean ok=wifiMan.disconnect();
                  System.out.println("disconnect() returns: "+ok);
                  System.out.println("enabling our network: "+networkId);
                  // https://code.google.com/p/android-developer-preview/issues/detail?id=2218
                  ok=wifiMan.enableNetwork(networkId,true);
                  System.out.println("enableNetwork() returns: "+ok);
                  System.out.println("trying to recommect to wifi.");
                  ok=wifiMan.reconnect();
                  System.out.println("reconnect returns: "+ok);
                  if(ok) {
                      wifiMan=(WifiManager)getSystemService(Context.WIFI_SERVICE);
                      wifiInf=wifiMan.getConnectionInfo();
                      ipAddress=wifiInf.getIpAddress();
                      System.out.println("wifi ip adress: "+ipAddress);
                  }
                  break;
              }
          }
      }
      String getIpAddressFromWifiManager() {
          WifiManager wifiMan=(WifiManager)getSystemService(Context.WIFI_SERVICE);
          System.out.println("isWifiEnabled() returns: "+wifiMan.isWifiEnabled());
          WifiInfo wifiInf=wifiMan.getConnectionInfo();
          System.out.println("wifi info: "+wifiInf);
          int ipAddress=wifiInf.getIpAddress();
          System.out.println("wifi ip adress: "+ipAddress);
          if(ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN))
              ipAddress=Integer.reverseBytes(ipAddress);
          byte[] ipByteArray=BigInteger.valueOf(ipAddress).toByteArray();
          String ipAddressString=null;
          try {
              ipAddressString=InetAddress.getByAddress(ipByteArray).getHostAddress();
          } catch(UnknownHostException ex) {
              System.out.println("Unable to get host address.");
              if(true)
                  retry();
          }
          return ipAddressString;
      }
      public class W extends Thread {
          W(int sleep) {
              this.sleep=sleep;
          }
          @Override public void run() {
              try {
                  Thread.sleep(sleep);
              } catch(InterruptedException e) {
                  System.out.println("1 caught: "+e);
              }
              String ipAddress=getIpAddressFromWifiManager();
              System.out.println("ip address: "+ipAddress);
              if(ipAddress==null)
                  new W(5_000).start();
          }
          int sleep;
      }
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
          FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
          fab.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Snackbar.make(view,"Replace with your own action",Snackbar.LENGTH_LONG).setAction("Action",null).show();
              }
          });
          new W(0).start();
      }
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_main,menu);
          return true;
      }
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          int id=item.getItemId();
          //noinspection SimplifiableIfStatement
          if(id==R.id.action_settings) {
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  }
  
  02-22 19:41:08.637 2715-2734/? I/System.out: isWifiEnabled() returns: true
  02-22 19:41:08.638 2715-2734/? I/System.out: wifi info: SSID: , BSSID: 00:00:00:00:00:00, MAC: 02:00:00:00:00:00, Supplicant state: SCANNING, RSSI: -127, Link speed: -1Mbps, Frequency: -1MHz, Net ID: -1, Metered hint: false, score: 0
  02-22 19:41:08.638 2715-2734/? I/System.out: wifi ip adress: 0
  02-22 19:41:08.638 2715-2734/? I/System.out: Unable to get host address.
  02-22 19:41:08.644 2715-2734/? I/System.out: wifi configurations (all): 1
  02-22 19:41:08.646 2715-2734/? I/System.out: found our network: ID: 0 SSID: "tablets" PROVIDER-NAME: null BSSID: null FQDN: null PRIO: 2
  02-22 19:41:08.646 2715-2734/? I/System.out:  numAssociation 74
  02-22 19:41:08.646 2715-2734/? I/System.out:  numNoInternetAccessReports 11
  02-22 19:41:08.646 2715-2734/? I/System.out:  KeyMgmt: NONE Protocols: WPA RSN
  02-22 19:41:08.647 2715-2734/? I/System.out:  AuthAlgorithms: OPEN SHARED
  02-22 19:41:08.647 2715-2734/? I/System.out:  PairwiseCiphers: TKIP CCMP
  02-22 19:41:08.647 2715-2734/? I/System.out:  GroupCiphers: TKIP CCMP
  02-22 19:41:08.647 2715-2734/? I/System.out:  PSK: 
  02-22 19:41:08.647 2715-2734/? I/System.out: Enterprise config:
  02-22 19:41:08.647 2715-2734/? I/System.out: password NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: engine 0
  02-22 19:41:08.647 2715-2734/? I/System.out: client_cert NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: anonymous_identity NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: identity NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: domain_suffix_match NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: phase2 NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: altsubject_match NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: subject_match NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: ca_cert NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: phase1 NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: key_id NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: engine_id NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: eap NULL
  02-22 19:41:08.647 2715-2734/? I/System.out: IP config:
  02-22 19:41:08.647 2715-2734/? I/System.out: IP assignment: STATIC
  02-22 19:41:08.647 2715-2734/? I/System.out: Static configuration: IP address 192.168.0.11/24 Gateway 192.168.0.1  DNS servers: [ 8.8.8.8 ] Domains
  02-22 19:41:08.647 2715-2734/? I/System.out: Proxy settings: NONE
  02-22 19:41:08.647 2715-2734/? I/System.out:  cuid=1000 cname=android.uid.system:1000 luid=1000 lname=android.uid.system:1000 lcuid=10044 userApproved=USER_APPROVED noInternetAccessExpected=false roamingFailureBlackListTimeMilli: 1000
  02-22 19:41:08.647 2715-2734/? I/System.out: triggeredLow: 0 triggeredBad: 0 triggeredNotHigh: 0
  02-22 19:41:08.647 2715-2734/? I/System.out: ticksLow: 0 ticksBad: 0 ticksNotHigh: 0
  02-22 19:41:08.647 2715-2734/? I/System.out: triggeredJoin: 0
  02-22 19:41:08.648 2715-2734/? I/System.out: autoJoinBailedDueToLowRssi: false
  02-22 19:41:08.648 2715-2734/? I/System.out: autoJoinUseAggressiveJoinAttemptThreshold: 0
  02-22 19:41:08.648 2715-2734/? I/System.out: SSID: "tablets"
  02-22 19:41:08.648 2715-2734/? I/System.out: wifi configuration status is disabled: false
  02-22 19:41:08.649 2715-2734/? I/System.out: disconnect() returns: true
  02-22 19:41:08.649 2715-2734/? I/System.out: enabling our network: 0
  02-22 19:41:08.738 2715-2734/? I/System.out: enableNetwork() returns: true
  02-22 19:41:08.738 2715-2734/? I/System.out: trying to recommect to wifi.
  02-22 19:41:08.739 2715-2734/? I/System.out: reconnect returns: true
  02-22 19:41:08.740 2715-2734/? I/System.out: wifi ip adress: 0
  02-22 19:41:08.740 2715-2734/? I/System.out: ip address: null
  02-22 19:41:13.744 2715-2741/? I/System.out: isWifiEnabled() returns: true
  02-22 19:41:13.747 2715-2741/? I/System.out: wifi info: SSID: tablets, BSSID: 60:e3:27:fb:8d:5a, MAC: 02:00:00:00:00:00, Supplicant state: COMPLETED, RSSI: -40, Link speed: 54Mbps, Frequency: 2462MHz, Net ID: 0, Metered hint: false, score: 60
  02-22 19:41:13.747 2715-2741/? I/System.out: wifi ip adress: 184592576
  02-22 19:41:13.748 2715-2741/? I/System.out: ip address: 192.168.0.11
  </code></pre>