我希望我的应用仅在应用首次启动时启动活动。 任何人都有任何想法?
我发现了这个,但它只显示黑屏。
public class WhatsNew extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
protected void onCreate(Bundle state){
super.onCreate(state);
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean dialogShown = settings.getBoolean("dialogShown", false);
if (!dialogShown) {
// AlertDialog code here
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("dialogShown", true);
editor.commit();
}
}
}
答案 0 :(得分:3)
当应用启动时,在活动首选项中设置一个已经运行活动的标志。将您的设置默认为false,然后仅在未设置标志时启动该活动。请注意,如果用户清除您的应用程序数据,或将其卸载并稍后再次安装,则活动将再次显示。
答案 1 :(得分:3)
我认为您谈论的是“日志”页面等活动,您只需在应用程序的整个生命周期中启动一次。 为此,您可以使用sharedPreferences:
SharedPreferences prefs;
SharedPreferences.Editor editor;
在你的startActivity(意图)之下,你添加:
prefs = getSharedPreferences("nbRepet",Context.MODE_PRIVATE);
editor = prefs.edit();
editor.putInt("nbRepet", 1);
editor.commit();
现在你的变量nbRepet的值为1。
之后,您可以将这些行添加到您的startActivity(intent)之上,以验证您的活动之前从未启动过:
//在这里你恢复了nbRepet的值..
preferences = MainActivity.this.getSharedPreferences("nbRepet", MODE_PRIVATE);
int value = preferences.getInt("nbRepet", 0);
// ..然后验证您的活动是否在之前启动。
if(value<1)
{
startActivity(intent);
}
答案 2 :(得分:2)
您需要一个检查持久化布尔值的Activity。即,
onCreate(Bundle bundle)
{
boolean firstRun = // persistance method here
Intent toForward;
if(firstRun)
// Create an intent to start you "only once" activity
// persist "firstRun" as false;
else
// Create an intent for your usual startup
startActivity(toForward);
finish();
}
答案 3 :(得分:2)
这将为你完成工作
package com.example.startup;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main); //we don't need this line
SharedPreferences settings=getSharedPreferences("prefs",0);
boolean firstRun=settings.getBoolean("firstRun",false);
if(firstRun==false)//if running for first time
{
SharedPreferences.Editor editor=settings.edit();
editor.putBoolean("firstRun",true);
editor.commit();
Intent i=new Intent(MainActivity.this,Second.class);//Activity to be launched For the First time
startActivity(i);
finish();
}
else
{
Intent a=new Intent(MainActivity.this,Main.class);//Default Activity
startActivity(a);
finish();
}
}
}
答案 4 :(得分:0)
取决于“第一次”的含义。最简单的方法是在SharedPreferences中添加一些标志......但是这可以保持一段时间。 ^^
答案 5 :(得分:0)
如果你的意思是在“启动应用程序时只启动一次”时只应调用onCreate一次,你可以将活动的launchMode设置为清单中的singleInstance或singleTask。
答案 6 :(得分:0)
请参阅此post中有关同一问题的答案。
我建议在onResume()内检查SharedPreference值是否先前已经运行过应用程序。