我有以下课程, 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
还是还有其他必须要做的事情?请帮助别人?
如果可能,有人可以写下代码来实现这个逻辑吗?
答案 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();
}
我认为应该是这样的。