2013-05-07 3 views
6

У меня есть следующий класс, SplashActivity.java:Создание активности появляются только один раз, когда приложение запускается

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

Я хочу, чтобы эта деятельность, чтобы загрузить только один раз, когда приложение установлено на первом мобильное устройство в первый раз. Будучи новичком в андроиде, я мало что знаю об этом. Я читал в местах, где используется SharedPreferences, но не понял реализации. И дело в этом заключается в том, что при первом использовании активность должна действовать как Launcher, вот что меня действительно смутило. Потому что в файле манифеста я объявляю другое действие, которое в моем случае было бы MainPage.java. Итак, как я могу реализовать эту логику? Я звоню по SplashActivity в MainPage или есть что-то еще, что нужно сделать ??? Помогите кому-нибудь?

Может кто-нибудь, пожалуйста, запишите код для реализации этой логики, если это возможно?

+0

@Pragnani Я хочу, чтобы это было как-то одно, например, если приложение установлено на мобильном устройстве в первый раз, только тогда должен появиться экран заставки. –

ответ

20

Добавьте этот код на свой 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 будет держать каждый раз, когда вы выполнить приложение, если вы не очистить данные от настройки на вашем Android. В первый раз вы получите значение из логического (activity_executed), сохраненного в таких настройках (ActivityPREF).

Если он не найдет значения, он вернет false, поэтому мы должны отредактировать настройку и установить значение в значение true. Следующее исполнение запустит активность TutorialOne.

finish() стирает текущую деятельность из истории стека, поэтому возврат невозможен с помощью кнопки обратно из TutorialOne.

О манифесте, вы можете установить этот actitiy с

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

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

Каждый раз, когда приложение выполняется запустит эту деятельность, но из-за истинные выставиться на "activity_executed" собирается начать новую деятельность с startActivity ,

+2

Ответы только на код, как правило, неодобрительно относятся к SO. Пожалуйста, попробуйте объяснить, что он делает и почему он работает, поэтому OP и другие могут учиться у него. – codeMagic

+0

Это сработало для меня! Thx – ymerdrengene

+0

Я запутался с веткой else, почему вы устанавливаете переменную в true, когда она уже верна? – 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(); 
} 

Я думаю, это должно быть так.

Смежные вопросы