Начать деятельность только один раз - PullRequest
3 голосов
/ 08 сентября 2011

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

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

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

Ответы [ 7 ]

3 голосов
/ 11 мая 2013

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

SharedPreferences prefs;
SharedPreferences.Editor editor;

и ниже вашей начальной активности (намерения) вы добавляете:

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);
}
3 голосов
/ 08 сентября 2011

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

2 голосов
/ 23 апреля 2014

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

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

}
2 голосов
/ 08 сентября 2011

Вам понадобится Activity, которая проверяет сохраняемое логическое значение.т.е.

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 голосов
/ 08 августа 2013

См. Мой ответ в этой публикации относительно этой же проблемы.

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

0 голосов
/ 08 сентября 2011

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

0 голосов
/ 08 сентября 2011

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

...