保持用户登录但双击后退出Android应用程序

时间:2017-11-02 13:50:51

标签: java android firebase firebase-authentication google-login

我正在使用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); }
}

如何在保持用户登录的情况下按两次退出应用程序?

1 个答案:

答案 0 :(得分:3)

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