2011-09-08 4 views
3

Я хочу, чтобы мое приложение запускало активность только при первом запуске приложения. У кого-нибудь есть идея?Начать деятельность только один раз

Я нашел это, но он показывает только черный экран.

public class WhatsNew extends Activity { 

public static final String PREFS_NAME = "MyPrefsFile"; 

protected void onCreate(Bundle state){ 

     super.onCreate(state); 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     boolean dialogShown = settings.getBoolean("dialogShown", false); 

     if (!dialogShown) { 
     // AlertDialog code here 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("dialogShown", true); 
     editor.commit();  
     } 
    } 

}

+2

Это показывает черный экран, потому что там нет макета не загружается (т.е. не 'setContentView'), и поэтому он показывает пустое окно. – Dave

ответ

2

Когда запуски приложения, установите флажок в настройках деятельности, что деятельность уже работают. По умолчанию вы устанавливаете значение false, а затем запускаете только эту активность, если флаг не установлен. Обратите внимание, что если пользователь очищает данные вашего приложения или удаляет его, а затем снова устанавливает его, активность будет отображаться снова.

0

В зависимости от того, что означает «первый раз». Самый простой способ - поместить некоторый флаг в SharedPreferences ... но это может остаться на некоторое время. ^^

2

Вам понадобится операция, которая проверяет сохраненные булевы. т.е.

onCreate(Bundle bundle) 
{ 
    boolean firstRun = // persistance method here 
    Intent toForward; 
    if(firstRun) 
     // Create an intent to start you "only once" activity 
     // persist "firstRun" as false; 
    else 
     // Create an intent for your usual startup 
    startActivity(toForward); 
    finish(); 
} 
0

Если вы имеете в виду, что OnCreate должен вызываться только один раз, когда «старт только один раз, когда приложение запускается», вы можете установить launchMode в acitivty к SingleInstance или singleTask в манифесте.

+0

Ты уверен в этом? Документация гласит: «Режимы« singleTask »и« singleInstance »также отличаются друг от друга только в одном отношении: деятельность« singleTask »позволяет другим действиям быть частью ее задачи. Она всегда лежит в основе ее задачи, но другие действия могут с другой стороны, действие «singleInstance» не позволяет другим действиям быть частью его задачи. Это единственное действие в задаче.Если он запускает другое действие, эта деятельность назначается другой задаче - как если бы FLAG_ACTIVITY_NEW_TASK был в намерении. » –

3

Я думаю, что вы говорите о таких действиях, как «журнал», который вы запускаете только один раз в своей жизни. Для этого вы можете использовать sharedPreferences:

SharedPreferences prefs; 
SharedPreferences.Editor editor; 

и ниже startActivity (умысел), добавьте:

prefs = getSharedPreferences("nbRepet",Context.MODE_PRIVATE); 
editor = prefs.edit(); 
editor.putInt("nbRepet", 1); 
editor.commit(); 

Теперь вашей переменной nbRepet имеют 1 в качестве значения.

После этого, вы можете добавить эти строки ВЫШЕ вашей startActivity (умысел), чтобы убедиться, что ваша деятельность никогда не была запущена до:

// здесь восстановить значение nbRepet .. В

preferences = MainActivity.this.getSharedPreferences("nbRepet", MODE_PRIVATE);  
int value = preferences.getInt("nbRepet", 0); 

// .. и вы проверяете, запущена ли ваша деятельность раньше.

if(value<1) 
{ 
    startActivity(intent); 
} 
0

См. Мой ответ в этом post, относительно этой же проблемы.

Я рекомендую проверить значение SharedPreference для того, было ли приложение ранее запущено, внутри onResume().

2

это сделает работу для вас

package com.example.startup; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); //we don't need this line 
    SharedPreferences settings=getSharedPreferences("prefs",0); 
    boolean firstRun=settings.getBoolean("firstRun",false); 
    if(firstRun==false)//if running for first time 
     { 
     SharedPreferences.Editor editor=settings.edit(); 
     editor.putBoolean("firstRun",true); 
     editor.commit(); 
     Intent i=new Intent(MainActivity.this,Second.class);//Activity to be  launched For the First time 
     startActivity(i); 
     finish(); 
    } 
    else 
    { 
     Intent a=new Intent(MainActivity.this,Main.class);//Default Activity 
     startActivity(a); 
     finish(); 
    } 
    } 

} 
+0

Это работало для меня. Спасибо @ JRE.exe – NarenderNishad

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