在我的应用程序中,我只想在第一次运行时运行一次启动画面,但问题是我已经放在了Manifest
这一行:android:noHistory="true"
如果我按下后退按钮并退出应用程序,它会很好用,但请注意应用程序仍在后台运行,当我按下应用程序图标时,它会再次返回启动画面,然后是我的注册页面。当我重新打开我的应用程序时,我想直接重定向到注册页面。
我该怎么做呢?提前感谢您的任何建议。
在我的应用程序中,我只想在第一次运行时运行一次启动画面,但问题是我已经放在了Manifest
这一行:android:noHistory="true"
如果我按下后退按钮并退出应用程序,它会很好用,但请注意应用程序仍在后台运行,当我按下应用程序图标时,它会再次返回启动画面,然后是我的注册页面。当我重新打开我的应用程序时,我想直接重定向到注册页面。
我该怎么做呢?提前感谢您的任何建议。
这就是我实现它的方式!希望它有所帮助!
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
public class check extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
SharedPreferences settings=getSharedPreferences("prefs",0);
boolean firstRun=settings.getBoolean("firstRun",false);
if(firstRun==false)//if running for first time
//Splash will load for first time
{
SharedPreferences.Editor editor=settings.edit();
editor.putBoolean("firstRun",true);
editor.commit();
Intent i=new Intent(check.this,Splash.class);
startActivity(i);
finish();
}
else
{
Intent a=new Intent(check.this,Main.class);
startActivity(a);
finish();
}
}
}
您可以在首次启动时运行应用程序时使用Shared Preferences保存一些布尔值,然后在每次启动时检查该值,如果退出则直接启动注册活动。
虽然,这种仅保存正常值的方法有一个漏洞,假设您的应用程序安装在用户设备上,并且用户只是用新版本更新了应用程序而没有卸载第一个,那么在这种情况下,您也不会看到 Splash因为旧的共享首选项已经与旧的保存值一起存在。
因此,在这种情况下,您需要通过保存应用程序版本来更改逻辑,并在每次启动时检查应用程序版本,这样您就能够产生真实的用户体验。
为了详细说明“共享偏好”的提及,如果您将其插入主要活动的 onCreate() 中,我相信以下内容会起作用:
SharedPreferences settings = this.getSharedPreferences("appInfo", 0);
boolean firstTime = settings.getBoolean("first_time", true);
if (firstTime) {
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("first_time", false);
editor.commit();
}
块执行后,“firstTime”应指示这是否是应用程序第一次运行。我相信,“appInfo”只是您希望调用首选项文件的任何占位符名称。
所以这就是我在 SplashActivity(onCreate) 中所做的:
SharedPreferences settings = getSharedPreferences("prefs", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("firstRun", true);
editor.commit();
Intent intent = new Intent(this, RegistrationActivity.class);
startActivity(intent);
SplashActivity(onResume):
@Override
public void onResume() {
super.onResume();
SharedPreferences settings = getSharedPreferences("prefs", 0);
boolean firstRun = settings.getBoolean("firstRun", true);
if (!firstRun) {
Intent intent = new Intent(this, RegistrationActivity.class);
startActivity(intent);
Log.d("TAG1", "firstRun(false): " + Boolean.valueOf(firstRun).toString());
} else {
Log.d("TAG1", "firstRun(true): " + Boolean.valueOf(firstRun).toString());
}
}
在我的注册活动(onCreate)中:
SharedPreferences settings = getSharedPreferences("prefs", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("firstRun", false);
editor.commit();
boolean firstRun = settings.getBoolean("firstRun", true);
Log.d("TAG1", "firstRun: " + Boolean.valueOf(firstRun).toString());
然后禁用返回按钮以防止返回,除非用户按下 Home:
@Override
public void onBackPressed() {
}
非常感谢那些做出贡献的人!
您可以在清单文件中使用android:noHistory="true"的最简单方法。