如何防止用户退出后返回受保护的页面

时间:2018-06-02 17:43:38

标签: android firebase android-intent android-activity firebase-authentication

我希望用户无需登录即可访问MainActivity(主页)。为此,当用户打开应用时,MainActivity检查用户是否未登录,然后通过LoginActivity转到Intent

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

但是2个问题发生了:

  • 应用程序将用户移至LoginActivity后,按“返回”按钮,用户可以查看主页登录。
  • 登出用户移动到登录页面后,按“返回”按钮,用户可以转到主页。
  

请帮我解决这个问题。

MainActivity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAuth = FirebaseAuth.getInstance();
    mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user == null){

                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        }
    });

    mDataRef = FirebaseDatabase.getInstance().getReference().child("BlogApp").child("Posts");
    mBlogList = findViewById(R.id.blogListId);
    mBlogList.setLayoutManager(new LinearLayoutManager(this));
    adapterSetUp();
    mBlogList.setAdapter(adapter); // load blog posts

}

3 个答案:

答案 0 :(得分:2)

finish()之后调用startActivity方法:

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

答案 1 :(得分:0)

您应该启动一个启动器活动,该活动可以为未注册的用户加载登录活动,也可以为已注册的用户加载主要活动。 另一种可以实现所需功能的方法是使用两个片段创建主要活动,一个用于主页,另一个用于登录页面,而不是您可以决定要呈现的片段。 希望它有所帮助,祝你好运!

答案 2 :(得分:0)

使用finishAffinity()方法完成当前活动和所有父活动。但它仅适用于API 16+

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finishAffinity();

在startActivity之后调用finishAffinity()方法。