2013-05-07 7 views
6

Mam następujące klasy, SplashActivity.java:Dokonywanie czynności pojawiają się tylko raz, gdy aplikacja jest uruchomiona

public class SplashScreen extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.splash); 
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(5000); 
       }catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       finally{ 
        Intent tutorial = new Intent(SplashScreen.this, TutorialOne.class); 
        startActivity(tutorial); 
       } 

      } 
     }; 
     timer.start(); 
      } 
} 

Chcę działalność ta załadować tylko raz, gdy aplikacja jest zainstalowana na pierwszy urządzenie mobilne po raz pierwszy. Będąc nowicjuszem na Androida, mam bardzo mały pomysł na ten temat. Czytam w miejscach, w których należy używać SharedPreferences, ale nie rozumiałem implementacji. A rzeczą związaną z tym działaniem jest to, że działanie musi działać jako Launcher, kiedy jest używane po raz pierwszy, co bardzo mnie zdezorientowało. Ponieważ w pliku manifestu deklaruję inną aktywność, która w moim przypadku byłaby MainPage.java. Jak więc mogę wdrożyć tę logikę? Czy mogę zadzwonić pod numer SplashActivity w numerze MainPage lub czy jest coś jeszcze, co należy zrobić? Pomóż komuś?

Czy ktoś może zapisać kod, aby wdrożyć tę logikę, jeśli to możliwe?

+0

@Pragnani Chcę, żeby to była jednorazowa sprawa, np. Jeśli aplikacja jest instalowana w urządzeniu mobilnym tylko po raz pierwszy, wtedy powinien pojawić się ekran powitalny. –

Odpowiedz

20

Dodaj ten kod do swojej metody onCreate

SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 
     Intent intent = new Intent(this, TutorialOne.class); 
     startActivity(intent); 
     finish(); 
    } else { 
     Editor ed = pref.edit(); 
     ed.putBoolean("activity_executed", true); 
     ed.commit(); 
    } 

SharedPreferences będą trzymać za każdym razem wykonać aplikację chyba wyczyścić dane z ustawionej na Androida. Po raz pierwszy otrzymamy wartość z wartości boolowskiej (activity_executed) zapisanej w takich preferencjach (ActivityPREF).

Jeśli nie znajdzie żadnej wartości, zwróci false, więc musimy zmienić preferencję i ustawić wartość na true. Następna operacja uruchomi działanie TutorialOne.

kasuje bieżącą aktywność z historii stosu, więc powrót nie jest możliwy za pomocą przycisku wstecz z TutorialOne.

O swoim manifeście, można ustawić tę actitiy z

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

Za każdym razem, gdy aplikacja jest wykonywany uruchomi tę działalność, ale ze względu na prawdziwej setted na "activity_executed" ma zamiar rozpocząć nową działalność z startActivity .

+2

Odpowiedzi tylko na kod są zwykle mile widziane na SO. Spróbuj wyjaśnić, co robi i dlaczego działa, aby OP i inni mogli się z niego uczyć. – codeMagic

+0

To działało dla mnie! Thx – ymerdrengene

+0

Jestem zdezorientowany z inną gałęzią, dlaczego ustawiasz zmienną na wartość true, jeśli jest już prawdą? – zdd

0
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 

} else { 
    Intent intent = new Intent(this, TutorialOne.class); 
    startActivity(intent); 
    finish(); 
    Editor ed = pref.edit(); 
    ed.putBoolean("activity_executed", true); 
    ed.commit(); 
} 

Myślę, że tak powinno być.