2013-05-07 16 views
6

ho la seguente classe, SplashActivity.java:Fare un'attività appaiono solo una volta, quando si avvia l'applicazione

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(); 
      } 
} 

Voglio questa attività per caricare solo una volta, quando l'applicazione viene prima installato su il dispositivo mobile per la prima volta. Essendo nuovo per Android ho un'idea molto piccola su questo. Ho letto in posti che il SharedPreferences deve essere utilizzato, ma non ho capito l'implementazione. E la cosa su questa attività è che, l'attività deve agire come una Launcher quando viene usata per la prima volta, questo è quello che mi ha davvero confuso. Perché nel file manifest dichiaro un'altra attività che nel mio caso sarebbe il MainPage.java. Quindi, come posso implementare questa logica ?? Devo chiamare il SplashActivity nel MainPage o c'è qualcos'altro che deve essere fatto ?? Per favore aiuta qualcuno?

Qualcuno può scrivere il codice per implementare questa logica, se possibile?

+0

@Pragnani Lo voglio come una cosa sola ... come se l'app fosse installata in un dispositivo mobile per la prima volta solo allora dovrebbe mostrare la schermata iniziale. –

risposta

20

Aggiungi questo codice al metodo 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 sarà mantenere ogni volta che si esegue l'applicazione, a meno di pulire i dati da Impostazioni sul vostro Android. La prima volta otterrà il valore da un valore booleano (activity_executed) salvato su tali preferenze (ActivityPREF).

Se non trova alcun valore, restituirà false, quindi dobbiamo modificare la preferenza e impostare il valore su true. La prossima esecuzione avvierà l'attività TutorialOne.

finish() cancella l'attività corrente dalla cronologia dello stack, quindi non è possibile tornare indietro utilizzando il pulsante indietro da TutorialOne.

Informazioni sul manifesto, è possibile impostare questa actitiy con

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

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

Ogni volta che l'applicazione viene eseguita lancerà questa attività, ma a causa della vera Setted sul "activity_executed" sta per iniziare una nuova attività con startActivity .

+2

Le sole risposte al codice sono solitamente disapprovate su SO. Si prega di provare a spiegare cosa fa e perché funziona così l'OP e gli altri possono imparare da esso – codeMagic

+0

Questo ha funzionato per me! Thx – ymerdrengene

+0

Sono confuso con il ramo else, perché imposti la variabile su true quando è già vero? – 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(); 
} 

Penso che dovrebbe essere così.

Problemi correlati