安装应用程序时只运行一段代码

时间:2013-02-25 07:00:24

标签: android sharedpreferences android-preferences

我想在我的应用程序中只运行一段代码,并且是第一次运行它时(新安装的应用程序)。我怎么能这样做,任何人都可以解释给出一段代码。

实际上,在我的android项目中,我想创建数据库并在第一次运行时插入一些值。之后,该特定代码不应该再次运行。如何通过 SharedPreferences 偏好设置来实现此机制。

示例代码会更有帮助。

4 个答案:

答案 0 :(得分:38)

首先你可以使用SQLiteOpenHelper。这是用数据库做事的首选方式。该类有一个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 ran.
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
  }
}

不要忘记放置activity declaration in manifest,以及intentfilters(action = MAIN,category = LAUNCHER)。

如果您有多个活动并且您不想复制启动逻辑,则可以将初始化逻辑放在Application实例中,该实例是在所有活动(以及其他组件,如服务,广播接收器,内容提供商)。

只需创建类似的类:

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

所有你需要的工作,都放在AndroidManifest.xml属性中的application标签android:name =“。App”。

<!-- other xml stuff -->

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

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

答案 1 :(得分:14)

你可以尝试:

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

在创建的第一个活动中写下此内容。然后代码将不再执行。

答案 2 :(得分:4)

您需要在应用中运行此代码的任何地方:

  1. 检查共享首选项中布尔firstTime是否为True
  2. 如果不是

    • 运行一次性代码
    • 在共享偏好设置中将firstTime保存为true
  3. 这样的事情:

    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 :(得分:4)

这是我在这些情况下所做的事情:

    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 
    }

希望这会有所帮助