如何在应用程序从后台进入前台时始终启动登录活动?

时间:2017-01-31 12:41:59

标签: android background-foreground activity-state

我有LoginActivity这是我的主要活动以及启动活动,我还有其他活动,例如CustomerAddActivity& CustomerListActivity

现在假设我在CustomerAddActivity并按下主页按钮,应用程序转到后台,当应用程序再次出现在前台时,如果有效凭据(简单凭据等)必须首先要求LoginActivity作为来自sq-lite的用户名和密码)然后返回CustomerAddActivity的状态。

2 个答案:

答案 0 :(得分:-1)

返回应用时,您可以startActivityForResult登录用户,然后返回上一个状态。为了在任何地方执行此操作,您可以像这样定义一个抽象BaseActivity,并从所有其他类中定义override

public abstract class BaseActivity extends AppCompatActivity {
    public static final int REQUEST_CODE = 1;
    private boolean shouldCheckCredentials = false;

    @Override
    protected void onPause() {
        shouldCheckCredentials = true;
        super.onPause();
    }

    @Override
    protected void onResume() {
        if(shouldCheckCredentials){
            Intent loginIntent = new Intent(this,LoginActivity.class);
            startActivityForResult(loginIntent,REQUEST_CODE);
        }
        super.onResume();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == BaseActivity.REQUEST_CODE && resultCode == RESULT_OK) {
            shouldCheckCredentials = false;
        }
    }
}

答案 1 :(得分:-1)

从LoginActivity

启动CustomerAddActivity时,您可以传递intent中的登录信息

在LoginActitivity中

Intent intent = new Intent(this, CustomerAddActivity.class);
    intent.putExtra("login_info", "success");
    startActivity(intent);

然后在CustomerAddActivity()的onResume()中删除该登录信息

 @Override
protected void onResume() {
    super.onResume();

    String login = getIntent().getStringExtra("login_info");
    if(login != null){
        getIntent().removeExtra("login_info"); 

    } else {
        startActivity(new Intent(getApplicationContext(), LoginActivity.class));
    }
}

因此,只要您的CustomerAddActivity出现在前台,它就会首先检查login_info。如果它无法找到它将启动LoginAvctivity。