Exécutez un morceau de code seulement une fois quand une application est installée [dupliquer]

cette question a déjà une réponse ici:

je veux lancer un morceau de code une seule fois dans mon application et c'est quand je l'exécute pour la première fois (application nouvellement installée). Comment pouvais-je faire ceci, quelqu'un peut expliquer donner un morceau de code.

en fait, dans mon projet android je veux créer une base de données et insérer quelques valeurs sur la première exécution seulement. Après cela, ce morceau particulier de code ne devrait plus fonctionner. Comment réaliser ce mécanisme à travers SharedPreferences ou Preferences .

Exemple de code sera plus utile.

23
demandé sur Chintan Soni 2013-02-25 11:00:23

4 réponses

devant tout ce que vous pouvez utiliser SQLiteOpenHelper . Il est préférable de faire des choses avec la base de données. Cette classe a une méthode onCreate(SQLiteDatabase) , appelée lors de la création de la base de données. Je pense que vous vous y sentez bien.

si vous voulez plus de flexibilité et votre première logique de temps n'est pas liée seulement avec la base de données, vous pouvez utiliser l'échantillon fourni plus tôt. Vous avez juste besoin de le mettre dans la place de démarrage.

il y a 2 spots de démarrage. Si vous avez seulement une seule activité, vous pouvez mettre votre code dans la méthode onCreate , donc ce sera comme ceci:

public void onCreate(Bundle savedInstanceState) {
  // don't forget to call super method.
  super.onCreate(savedInstanceState);

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
  if (!prefs.getBoolean("firstTime", false)) {
    // <---- run your one time code here
    databaseSetup();

    // mark first time has ran.
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
  }
}

n'oubliez pas de mettre déclaration d'activité dans le manifeste , ainsi que intentfilters (action = MAIN , catégorie = LAUNCHER ).

Si vous avez plus d'une activité et vous ne voulez pas dupliquer votre démarrage logique, vous pouvez simplement mettre votre logique d'initialisation dans Application instance, qui est créée avant toutes les activités (et d'autres composants, tels que les services, les récepteurs de radiodiffusion, les fournisseurs de contenu).

il suffit de créer une classe comme celle-ci:

public class App extends Application {

  @Override
  public void onCreate() {
    super.onCreate();

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (!prefs.getBoolean("firstTime", false)) {
      // <---- run your one time code here
      databaseSetup();

      // mark first time has ran.
      SharedPreferences.Editor editor = prefs.edit();
      editor.putBoolean("firstTime", true);
      editor.commit();
    }
}

Tout ce dont vous avez besoin pour que cela fonctionne, est mis dans application étiquette dans AndroidManifest.attribut XML android: name=".App."

<!-- other xml stuff -->

<application ... android:name=".App">

   <!-- yet another stuff like nextline -->
   <activity ... />
</application>
36
répondu pepyakin 2018-08-06 07:42:20

Vous pouvez essayer :

SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun)
{
    // Code to run once
    SharedPreferences.Editor editor = wmbPreference.edit();
    editor.putBoolean("FIRSTRUN", false);
    editor.commit();
}

écrivez ceci dans votre première activité sur create. Puis après le code ne s'exécutera plus.

12
répondu Sanober Malik 2013-02-25 07:04:00

partout où vous devez exécuter ce code dans votre application:

  1. vérifier si le booléen firstTime est vrai dans les préférences partagées
  2. Si ce n'est

    • Exécuter le code
    • Enregistrer firstTime aussi vrai dans les préférences partagées

quelque chose comme ça:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("firstTime", false)) {
    // run your one time code here
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
}
3
répondu Anup Cowkur 2013-02-25 07:04:49

voici ce que je fais dans ces situations:

    wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);


    isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);

    if (isFirstRun)
    {

        // Do your magic here

        SharedPreferences.Editor editor = wmbPreference.edit();
        editor.putBoolean("FIRSTRUN", false);
        editor.commit();
    }else{
        //what you do everytime goes here 
    }

espérons que cette aide

2
répondu Driss Bounouar 2017-07-12 13:11:42