8

在我的应用程序中,我只想在第一次运行时运行一次启动画面,但问题是我已经放在了Manifest这一行:android:noHistory="true"如果我按下后退按钮并退出应用程序,它会很好用,但请注意应用程序仍在后台运行,当我按下应用程序图标时,它会再次返回启动画面,然后是我的注册页面。当我重新打开我的应用程序时,我想直接重定向到注册页面。

我该怎么做呢?提前感谢您的任何建议。

4

5 回答 5

12

这就是我实现它的方式!希望它有所帮助!

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();
    }
}

}
于 2014-02-17T06:14:21.460 回答
3

您可以在首次启动时运行应用程序时使用Shared Preferences保存一些布尔值,然后在每次启动时检查该值,如果退出则直接启动注册活动。

虽然,这种仅保存正常值的方法有一个漏洞,假设您的应用程序安装在用户设备上,并且用户只是用新版本更新了应用程序而没有卸载第一个,那么在这种情况下,您也不会看到 Splash因为旧的共享首选项已经与旧的保存值一起存在。

因此,在这种情况下,您需要通过保存应用程序版本来更改逻辑,并在每次启动时检查应用程序版本,这样您就能够产生真实的用户体验。

看看这个:如何使用 Android 首选项创建一次性欢迎屏幕?

于 2013-09-04T11:51:51.753 回答
3

为了详细说明“共享偏好”的提及,如果您将其插入主要活动的 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”只是您希望调用首选项文件的任何占位符名称。

于 2013-09-04T11:52:31.897 回答
2

所以这就是我在 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() {
}

非常感谢那些做出贡献的人!

于 2013-09-05T10:11:24.783 回答
0

您可以在清单文件中使用android:noHistory="true"的最简单方法。

于 2016-06-14T08:04:33.527 回答