Splashscreen Wifi 2xTimer

  • 13 Antworten
  • Letztes Antwortdatum
N

N3cron

Fortgeschrittenes Mitglied
1
Hallo zusammen. Wusste nicht wie ich es anders nennen soll. Habe auch schon gegooglet, aber nichts hat mir bisher weiter geholfen.

Ich habe folgenden Code geschrieben, der allerdings wegen den Timern noch nicht funktioniert. Ohne ja. Und zwar soll beim start der APP abgefragt werden, ob
Wifi Connecting --- Warte zb 6 Sek. bis Wifi vorhanden, und starte Activity
oder
Wifi Connected ---- Warte nur 1,5 Sek und gehe direkt weiter

Kann mir jemand sagen was ich falsch mache, und wenn ja wie es aussehen koennte? Würde gern von dem Code her alles so belassen. Also keinen anderen Timer oder sonst was nehmen. Gibt ja wahrscheinlich viele möglichkeiten.

PS. Hat jemand nen link wie das mit dem Debug geht? Habs mal probiert aber bekomm es nicht so hin. Sowie LogCat. Für nen am besten Link in Deutsch wäre ich sehr dankbar.

So, nun der Code

HTML:
public class Splashscreen extends Activity {
    private WifiManager wifi;
    private Handler start;
    int SPLASH_TIME_OUT;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifi.setWifiEnabled(true);
        start = new Handler();
        ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        State wifi = conMan.getNetworkInfo(1).getState();

        if (wifi == NetworkInfo.State.CONNECTED) {
            SPLASH_TIME_OUT = 1500;
        }

        else if (wifi == NetworkInfo.State.CONNECTING) {
            SPLASH_TIME_OUT = 6000;
        }

        start.postDelayed(new Runnable() {
            @Override
            public void run() {

                Intent intent = new Intent(Splashscreen.this,
                        MainActivity.class);
                Splashscreen.this.startActivity(intent);

            }

        }, SPLASH_TIME_OUT);
    }
}
 
Kann mir keiner helfen?

Komm sonst nicht weiter... :sad:
 
Was genau funktioniert denn nicht?

da wifi ein State Objekt ist solltest du das übrigens mit
NetworkInfo.State.CONNECTED.equals(wifi) testen und nicht mit ==.

Vergiss das, hab gerade gesehen, dass State ein Enum ist, da kann man == nutzen ;)

Was Debug angeht, das funktioniert eigentlich nur nicht wenn nicht der richtige treiber installiert ist.
 
Hi
Also

Ist Wlan Connected, wartet das der SplashScreen 1,5 sec ab und geht weiter zur MainActivitiy. Funktion IO. Allerdings drücke ich den MenuButton Button, Exit) und beende das app, werde ich wieder zur Splashscreen Activity geschmissen

Ist Wlan aus, und wird bei start aktiviert, fragt das app die 6 Sec garnicht ab, sondern geht direkt zur MainActivity.
Funktion des MenuButton (Exit) passiert das selbe wie oben, MainActivity wird aufgerufen


PS. Bevor ich den WIFI Status abgerufen habe, und nur 1 mal den Timer gesetzt habe, ging alles. Auch das beenden der App. Hier mal der alte Code

HTML:
package com.example.ibs;

import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;

public class Splashscreen extends Activity {
    private WifiManager wifi;
    private static final int SPLASH_DURATION = 5500;
    private Handler start;
    private boolean isBackButtonPressed;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Change WIFI
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifi.setWifiEnabled(true);
        setContentView(R.layout.splash);

        // SplashScreen + BackButton zum ueberspringen
        start = new Handler();
        start.postDelayed(new Runnable() {
            @Override
            public void run() {
                finish();

                if (!isBackButtonPressed) {
                    Intent intent = new Intent(Splashscreen.this,
                            MainActivity.class);
                    Splashscreen.this.startActivity(intent);

                }
            }
        }, SPLASH_DURATION);
    }
 
Zuletzt bearbeitet:
Bei deinem ersten Code kann es sein, dass der WifiManager etwas zeit braucht um nach dem setWifiEnabled(true) überhaupt zu reagieren.

Dann kommst du bei deiner Auswahl an und der Status ist Disconnected.
Dann wartet der genau 0 millisekunden.
Ich glaube das Wifi braucht ein wenig bis es in den Connecting Status geht

Was den Backbutton angeht versuch mal die MainActivity mit dem folgenden Flag zu starten.
Intent | Android Developers
 
Danke schon mal für deine Antwort.

Vorerst is für mich aber wichtig warum es so nicht funktioniert.

Connected funktioniert
Connecting funktioniert nicht. Aber warum? Er müsste doch bei start erkennen das das WLAN aktiviert wird. Und von dort aus an 6 sek warten.

Der ursprüngliche Beitrag von 17:36 Uhr wurde um 19:12 Uhr ergänzt:

Mit qaulmenden Kopf, hab ich es selbst geschafft.

Danke
 
Hab es so gelöst obwohl es im NetworkInfo mit connecting drin steht

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
SPLASH_DURATION = 1500;

} else if (!mWifi.isConnected()) {
SPLASH_DURATION = 6800;

}

Hab jetzt das ganze einfach verneint.
Hättest du noch ne idee wie ich zb jede sekunde abfragen kann ob wifi connecting nun connected ist?

Beispiel
Die 6,8 sec laufen runter und bis dahin is das wlan connected. Klappt
Sollte aber das wlan schon bei 5 sec connected sein, läuft die zeit weiter ab bis die 6,8 sec um sind. Wie sag ich ihm das er dann nach 5 sec aufhören kann? Um den User nicht unötig warten zu lassen

Danke
Wonach muss ich suchen?
 
Nach einen Timer oder Countdowntimer. Die kann man mit cancel() vorzeitig beenden.
 
das macht er ja sobald die 6,8 sek um sind. Funktion ist ok
Was ist aber wenn das Wlan nach 4 sek schon Connected ist. Dann soll der Timer ja sagen.... is ok Wlan is Connected, dann höre ich jetzt auf und mach nicht bis 6,8 weiter.

Also der Timer muss irgendwie Abfragen wie weit das Wlan ist.
Wlan verbunden? Nein? 1 sek weiter. Wlan verbunden? Nein? 1 sek weiter
Wlan verbunden? Ja? Ok, starte MainActivity.

Hoffe ich bringe das hier verständlich rüber
 
Danke. Muss jetzt zur Arbeit, werde es mir aber morgen sofort anschauen!

Vielen Dank
 
markus.tullius schrieb:
Du benutzt ein Handler, ich finde nur keinen Thread, der dazugehört.

Braucht er ja auch nicht zwingend.
Dann wird der delayed runable im UI Thread ausgeführt, was an dieser Stelle sogar vollkommen ok ist aus meiner Sicht ^^

N3cron schrieb:
Danke schon mal für deine Antwort.

Vorerst is für mich aber wichtig warum es so nicht funktioniert.

Connected funktioniert
Connecting funktioniert nicht. Aber warum? Er müsste doch bei start erkennen das das WLAN aktiviert wird.

Das hab ich doch oben erklärt warum es nicht funktioniert.
Wenn du setWifiEnabled machst ist der halt nicht sofort im Status connecting.
Er ist erst mal (weiterhin) im Status Disconnected.
Stell dir das so vor, dass auch das Wifi Module erst booten muss.
Nur bist du mit deinem Code schneller das heißt bevor er soweit ist um von disconnected auf connecting zu gehen machst du deine Abfrage und der Status ist weder Connected noch Connecting sonder immer noch Disconnected.
Deshalb hat das vorher nicht funktioniert.
 
Danke für die Erklärung, habe ich ich dann auch gemerkt. Man lernt ja immer dazu. ;)
 
Zurück
Oben Unten