2013-02-25 19 views
21

アプリケーションでコードを一度しか実行しないで、最初に実行するのは新しくインストールされたアプリケーションです。どのように私はこれを行うことができます、誰もコードの一部を説明することができます。アプリケーションのインストール時にコードを一度だけ実行する

実際、私のアンドロイドプロジェクトでは、データベースを作成し、最初の実行時にいくつかの値を挿入します。その後、その特定のコードが再び実行されるべきではありません。 SharedPreferencesまたはPreferencesでこのメカニズムをどのように達成できますか。

サンプルコードが役立ちます。

答えて

33

。データベースを使って作業するのが望ましい方法です。このクラスにはonCreate(SQLiteDatabase)メソッドがあり、最初にデータベースを作成するときに呼び出されます。私はそれがあなたによく合うと思います。

さらに柔軟性があり、初めてロジックがデータベースのみで結ばれないようにするには、先に提供されたサンプルを使用できます。あなたはスタートアップの場所に置くだけです。

2つのスタートアップスポットがあります。あなたは、単一の活性を有している場合、あなたはonCreateメソッドにコードを置くことができるので、それはこのようになります。

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 runned. 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstTime", true); 
    editor.commit(); 
    } 
} 

それはintentfiltersだだけでなく、activity declaration in manifestを置くことを忘れないでください(アクション= MAIN、カテゴリ= LAUNCHER)。

複数のアクティビティがあり、スタートアップロジックを複製したくない場合、すべてのアクティビティ(およびサービス、ブロードキャストレシーバなどの他のコンポーネント)が作成される前に、 、コンテンツプロバイダ)。

ちょうどそのようなクラスを作成します。

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 runned. 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putBoolean("firstTime", true); 
     editor.commit(); 
    } 
} 

これが動作するために必要なのは、AndroidManifest.xmlをしてapplicationタグに入れてはアンドロイド属性:名=「アプリケーション」。

<!-- other xml stuff --> 

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

    <!-- yet another stuff like nextline --> 
    <activity ... /> 
</application> 
+0

ありがとう、あなたのコードは私を世界から救う。 –

9

あなたは試みることができる:

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

は、作成上のあなたの最初の活動でこれを書きます。その後、コードは再び実行されません。

+0

すなわち場所を助けます。 – pollaris

3

アプリでこのコードを実行する必要がどこに:

  1. チェックしませ

    • が一度コード
    • を実行した場合はブールfirstTimeは、共有設定
    • にTrueの場合共有設定でfirstTimeをtrueに保存する

このような何か:あなたはSQLiteOpenHelperを使用することができ、すべての前に

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

は、ここで私はそのような状況で何をすべきかです:

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 
    } 

希望これはsuper.onCreate(savedInstanceState)後

関連する問題