2012-03-27 9 views
0

So bekomme ich ein Problem, wenn ich den folgenden Code ausführen.Android Google Maps reagiert nicht richtig nach der Rückkehr von Wireless und Einstellungen von Intent gestartet

private void checkInternet() { 
     ConnectivityManager cm = (ConnectivityManager) 
    getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
      Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
      startActivity(intent); 
     } 
     else{ 
     boolean isConnected = ni.isConnected(); 
     if (!isConnected) { 
       Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
       startActivity(intent); 
       while(ni == null){ 
        ni = cm.getActiveNetworkInfo(); 
       } 
      } 
     } 
    } 

Ich starte diesen Code von der OnCreate() - Prozedur in MapsActivity. Problem ist, dass ich einen Bildschirm bekomme, der für einen Moment ok ist, aber dann die Farbe zu Lightblue ändert. Ich habe das Gefühl, dass dies mit der Tatsache zusammenhängt, dass ich den WLAN-Einstellungsbildschirm zu schnell verlasse und Mobile Internet keine Zeit hat, sich vollständig einzuschalten. Wenn ich ausgehe und zu der Aktivität zurückkomme, wenn das Internet an ist, scheint alles normal zu funktionieren.

Auch ich fand heraus, dass ein Thread mit Schlaf nach dem Ausführen des Codes normal funktioniert.

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.location_activity_layout); 

     //checkGPS(); 
     checkInternet(); 

     try { 
      Thread.sleep(10000); 
     } catch (InterruptedException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     map = (MapView) findViewById(R.id.mapview); 
     map.setSatellite(false); 
     map.setBuiltInZoomControls(true); 

Die Frage ist, ob es ein besserer Weg, dies zu lösen, als einen Faden und etwas Zeit für das Internet wartete einzuschalten.

+0

Noch nie in der Hauptanwendungsthread schlafen. Sie erhalten Fehler, die nicht auf die Anwendung reagieren. – CommonsWare

+0

Ich denke, ich könnte dann AsyncTask verwenden? Aber der Hauptpunkt, den ich anspreche, ist, dass ich neben dem Einschlafen des Threads auch noch etwas Zeit verlieren kann, bis das Internet eingeschaltet wird – FilipPudak

Antwort

0

Ok fanden heraus, was falsch war ich die Verbindungsüberprüfung in den falschen Teil des Codes wurde Looping den richtigen Code für checkInternet() ist

private void checkInternet() { 
     ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
      Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
      startActivity(intent); 
     } 
     else{ 
     boolean isConnected = ni.isConnected(); 
     if (!isConnected) { 
       Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
       startActivity(intent); 
      } 
     } 
     while(ni == null){ 
      ni = cm.getActiveNetworkInfo(); 
     } 
    } 
Verwandte Themen