当应用程序启动时,使活动仅出现一次

时间:2013-05-07 12:55:38

标签: android sharedpreferences

我有以下课程, SplashActivity.java

public class SplashScreen extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.splash);
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(5000);
                }catch(InterruptedException e)
                {
                    e.printStackTrace();
                }
                finally{
                    Intent tutorial = new Intent(SplashScreen.this, TutorialOne.class);
                    startActivity(tutorial);
                }

            }
        };
        timer.start();
          }
}

我希望此活动仅在首次在移动设备上首次安装应用时加载一次。作为Android的新手,我对此一无所知。我在地方读到SharedPreferences将被使用,但不理解实现。关于这项活动的事情是,当第一次使用时,活动必须充当Launcher,这才是让我感到困惑的事情。因为在清单文件中我声明了另一个活动,在我的例子中是MainPage.java。那我怎么能实现这个逻辑?我是否呼吁SplashActivity中的MainPage还是还有其他必须要做的事情?请帮助别人?

如果可能,有人可以写下代码来实现这个逻辑吗?

2 个答案:

答案 0 :(得分:23)

将此代码添加到onCreate方法

    SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
    if(pref.getBoolean("activity_executed", false)){
        Intent intent = new Intent(this, TutorialOne.class);
        startActivity(intent);
        finish();
    } else {
        Editor ed = pref.edit();
        ed.putBoolean("activity_executed", true);
        ed.commit();
    }

每次执行应用时都会保留SharedPreferences,除非您清理Android上的“设置”中的数据。 第一次是从这样的首选项(ActivityPREF)上保存的布尔值(activity_executed)中获取值。

如果找不到任何值,则返回false,因此我们必须编辑首选项并将值设置为true。 下一次执行将启动活动TutorialOne

finish()从堆栈历史记录中删除当前活动,因此不能使用TutorialOne中的按钮返回。

关于您的清单,您可以使用

设置此活动
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter> 

每次执行该应用时都会启动此活动,但由于"activity_executed"上的真实设置将启动startActivity的新活动。

答案 1 :(得分:0)

 SharedPreferences pref = getSharedPreferences("ActivityPREF",    Context.MODE_PRIVATE);
     if(pref.getBoolean("activity_executed", false)){

} else { 
   Intent intent = new Intent(this, TutorialOne.class);
    startActivity(intent);
    finish();
    Editor ed = pref.edit();
    ed.putBoolean("activity_executed", true);
    ed.commit();
} 

我认为应该是这样的。