Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当应用程序从后台进入前台时,如何始终启动登录活动?_Android_Background Foreground_Activity State - Fatal编程技术网

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

Android 当应用程序从后台进入前台时,如何始终启动登录活动?,android,background-foreground,activity-state,Android,Background Foreground,Activity State,我有LoginActivity,这是我的主要活动和启动活动,我还有其他活动,如CustomerAddActivity和customerlistivity 现在假设我在CustomerAddActivity中,我按下Home按钮,应用程序进入后台,当应用程序再次进入前台时,它必须首先请求LoginActivity如果有效凭证(简单凭证,如sq lite中的用户名和pin),然后返回到CustomerAddActivity,并显示其状态 返回应用程序时,您可以startActivityForResu

我有
LoginActivity
,这是我的主要活动和启动活动,我还有其他活动,如
CustomerAddActivity
customerlistivity


现在假设我在
CustomerAddActivity
中,我按下Home按钮,应用程序进入后台,当应用程序再次进入前台时,它必须首先请求
LoginActivity
如果有效凭证(简单凭证,如sq lite中的用户名和pin),然后返回到
CustomerAddActivity
,并显示其状态

返回应用程序时,您可以
startActivityForResult
登录用户,然后返回到以前的状态。为了从任何地方执行此操作,您可以像这样定义一个抽象的
BaseActivity
,并从所有其他类中覆盖它:

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;
        }
    }
}

从LoginActivity启动CustomerAddActivity时,可以在intent中传递登录信息

物流竞争力

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出现在前台时,它都会首先检查登录信息。如果找不到它将启动LoginActivity。

我建议您将登录凭据存储在sharePreferences中,并在everyactivity中调用onResume时检查值,如果SharedReferences中没有凭据,则将使用重定向到登录活动。您可能应该重新考虑您的策略,因为这会很快激怒您的用户,如果他们每次都要登录。想象一下,每次你想使用Gmail、Facebook或Twitter应用程序时,你都必须登录。我知道,但这是客户的要求。如此无助