繁体   English   中英

保持用户登录状态,但双击后退出android应用

[英]Keep user logged in but exit android app on double pressing back

我正在使用Firebase登录用户,并实现了双击该代码以退出应用程序的功能。 但是问题是同一屏幕再次弹出。

我尝试了一种变通方法,设置一个SharedPreference ,然后在mAuthListner进行检查。 但这没有用。

以下是代码的相关部分:

mAuthListener = new FirebaseAuth.AuthStateListener(){
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        SharedPreferences d= getSharedPreferences("backPressed", Context.MODE_PRIVATE);
        Boolean t = d.getBoolean("back",false);

        if (firebaseAuth.getCurrentUser() != null && !t) {
            startActivity(new Intent(MainActivity.this, Second.class));
        }

        if (t) {
            d.edit().putBoolean("back",false);
        }

    }

};

按下后退按钮的代码:

boolean doubleBackToExitPressedOnce = false;
private Handler mHandler = new Handler();
private final Runnable mRunnable = new Runnable() {
    @Override
    public void run() {
        doubleBackToExitPressedOnce = false;
    }
};

@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        SharedPreferences d= getSharedPreferences("backPressed",Context.MODE_PRIVATE);
        d.edit().putBoolean("back",true);
        finish();
        return;
    }

    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

    mHandler.postDelayed(mRunnable, 2000);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mHandler != null) { mHandler.removeCallbacks(mRunnable); }
}

如何在保持用户登录状态下两次按两次退出应用程序?

这不是Firebase的问题,因为Firebase在您专门调用“注销”方法之前不会注销。

您不需要SharedPreferences。 只需将活动级别变量BackOnce设置为False,然后根据需要在OnBackPressed中将其设置。

boolean BackOnce = false;

@Override
public void onBackPressed() {

    if (BackOnce) {
        finish();
    } else {
        BackOnce = true;

        Snackbar sb = Snackbar.make(myView, "Press back again to close app", Snackbar.LENGTH_SHORT);
        sb.addCallback(new Snackbar.Callback() {
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                super.onDismissed(snackbar, event);
                BackOnce = false;
            }
        });
        sb.show();
      }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM