在 Android App 中使用代码设置启动 Activity

Posted

技术标签:

【中文标题】在 Android App 中使用代码设置启动 Activity【英文标题】:Set starting Activity with code in Android App 【发布时间】:2012-11-11 03:47:42 【问题描述】:

我是开发 android 应用程序的新手。 我知道如何使用 AndroidManifest.xml 设置启动 Activity,但我需要一种方法在选择启动 Activity 之前先检查一些内容。

我的问题: 我创建了一个 loginActivity 和一个 mainActivity。 我想做以下事情:如果我登录,我会将标志设置为 1,并且在下一次应用启动时,我想直接显示 mainActivity 而不是登录。

有没有办法做到这一点?我考虑过创建一个启动画面,我可以在其中检查我是否在显示第一个 Activity 之前登录。

谢谢,菲利普

更新的代码 - 工作:

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    // get preferences
    SharedPreferences userDetails = getApplicationContext().getSharedPreferences("userdetails", 0);
    String savedEmail = userDetails.getString("email", "");
    String savedPassword = userDetails.getString("password", "");
    Boolean savedRemember = userDetails.getBoolean("remember", false);
    Boolean savedLogged = userDetails.getBoolean("logged", false);

    // check if already logged in
    if(savedLogged) 
        // start the overview
        Intent intent = new Intent(this, ActivityOverview.class);
        startActivity(intent);
        finish();
    
    else 
        // initialize the form layout
        setContentView(R.layout.activity_login);

        // get views
        this.email = (EditText)findViewById(R.id.editTextEmail);
        this.password = (EditText)findViewById(R.id.editTextPassword);
        this.remember = (CheckBox)findViewById(R.id.checkBoxRemember);

        // set values to views
        this.email.setText(savedEmail);
        this.password.setText(savedPassword);
        this.remember.setChecked(savedRemember);
    

【问题讨论】:

【参考方案1】:

我的一个应用中有类似的东西。我让用户选择天气是否应该自动登录。这保存在SharedPreferences

当应用程序启动并在主页中时,您应该检查 - BEFORE setContentView(R.layout.activity_login); 并在 startActivity(); 之后设置 finish();

if(savedLogged) 

    Intent intent = new Intent(this, ActivityOverview.class);
    startActivity(intent);
    finish();

setContentView(R.layout.activity_login);

【讨论】:

【参考方案2】:

你真的不需要启动画面。

当用户成功登录您的应用时,将 SharedPreferences 中的布尔标志设置为 true。检查登录活动的onCreate() 中的此标志是否为真,如果是,请使用Intent 启动主活动。

【讨论】:

【参考方案3】:

您不需要显示您的活动。不确定您的代码流到底是什么,但您可以安全地开始,即使用 LoginActivity。在您的onCreate() 中检查您是否已登录(无论对您意味着什么),如果是,请立即启动 MainActivity,使用 finish() 杀死 LoginActivity。

【讨论】:

感谢您的快速回答,我知道了(请参阅我第一篇文章中的代码)。它工作正常,但是当我启动应用程序时,我会在新屏幕出现之前看到登录屏幕一小段时间。 Activity Layout 初始化之前是否有事件发生? 在致电setContentView() 之前进行检查。还要修复您的代码,以便将 finish(); 称为 AFTER startActivity(); 所以现在我做到了(见更新的帖子#1)。它工作得很好,但在短时间内其他活动也是可见的,但我认为不会有人看到。谢谢【参考方案4】:

使用闪屏是个好主意。启动 loginActivity 将在瞬间显示登录屏幕。这是不可取的。

【讨论】:

是的,我现在用那个试过了,那是我的问题。如果我从登录屏幕开始,它看起来不太好..

以上是关于在 Android App 中使用代码设置启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章

Flutter_设置APP图标和启动图

Android App 开机自启动

AndroidMac下Android Studio设置App启动页

如何在 Android 中启动我的 APP 的辅助功能设置页面?

【Android】APP白屏解决

android app 怎么让fiddler抓不到接口