如何在首次打开应用程序时只启动一次活动?
我有一个活动,我只想在应用程序第一次运行时运行。
再也不会。 这是一个Facebooklogin活动。 我只想在应用程序初次打开时启动一次。
我怎么去做这个?
我通常所做的是在Main Activity
添加一个特定的共享首选项的检查:如果缺less共享首选项,则启动单一运行的活动,否则继续执行主要活动。 当您启动一次运行“活动”时,将创build共享首选项,以便下次跳过。
编辑 :在我的onResume
为默认的活动,我这样做:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); boolean previouslyStarted = prefs.getBoolean(getString(R.string.pref_previously_started), false); if(!previouslyStarted) { SharedPreferences.Editor edit = prefs.edit(); edit.putBoolean(getString(R.string.pref_previously_started), Boolean.TRUE); edit.commit(); showHelp(); }
基本上我加载默认的共享首选项,并寻找prior_started布尔首选项。 如果没有设置,我将其设置,然后启动帮助文件。 我使用这个来自动显示第一次安装应用程序的帮助。
像这样的东西可能会工作。
public class MyPreferences { private static final String MY_PREFERENCES = "my_preferences"; public static boolean isFirst(Context context){ final SharedPreferences reader = context.getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); final boolean first = reader.getBoolean("is_first", true); if(first){ final SharedPreferences.Editor editor = reader.edit(); editor.putBoolean("is_first", false); editor.commit(); } return first; } }
用法
boolean isFirstTime = MyPreferences.isFirst(MyActivity.this);
在您的onCreate语句中发布以下代码
Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE) .getBoolean("isFirstRun", true); if (isFirstRun) { //show start activity startActivity(new Intent(MainActivity.this, FirstLaunch.class)); Toast.makeText(MainActivity.this, "First Run", Toast.LENGTH_LONG) .show(); } getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit() .putBoolean("isFirstRun", false).commit();
将FirstLaunch.classreplace为您想要启动的类
SharedPreferences dataSave = getSharedPreferences("firstLog", 0); if(dataSave.getString("firstTime", "").toString().equals("no")){ // first run is happened } else{ // this is the first run of application SharedPreferences.Editor editor = dataSave.edit(); editor.putString("firstTime", "no"); editor.commit(); }
我没有共享Prefrence这样做…因为我知道共享prefrence消耗一些内存,所以我在全局类中使用公共静态布尔variables….首先,我做了全局类Appconfig …然后我做了这样的布尔静态variables:
public class Appconfig { public static boolean activity = false; }
那么我使用这个公共静态布尔variables到我的欢迎活动类。 我正在使用许可协议页面。 我不得不一次在我的应用程序中使用,然后永远不会进一步显示每当我运行的应用程序。 所以我已经把欢迎活动的条件…如果欢迎类运行第一次,所以静态布尔variables为false …
if (Appconfig.activity == false) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this,LicesnceActivity.class); startActivity(intent); WelcomeActivity.this.finish(); } if (Appconfig.activity == true) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this, MainActivity.class); startActivity(intent); }
现在我在Licesnce Activity课上做了:
Appconfig.activity=true;
所以每当我运行应用程序的第二个活动“主要活动”后运行欢迎活动不是许可证活动….
在全球范围内宣布
public int count=0 int tempInt = 0;
首先在你的onCreate函数中通过这个代码。
count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent intent = new Intent(); intent.setClass(MainActivity.this, TemporaryActivity.class); startActivity(intent); count++; writeSharedPreference(count,"cntSP","cntKey"); }
过去这两种方法在onCreate之外
//Read from Shared Preferance public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName,Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); }
全球声明
public int count=0; int tempInt = 0;
第一个屏幕OnCreate
count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent i = new Intent(SplashScreen.this, IntroActivity.class); startActivity(i); count++; writeSharedPreference(count,"cntSP","cntKey"); } else { Intent i = new Intent(SplashScreen.this, MainActivity.class); startActivity(i); // close this activity }
现在外面的方法
public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); }