如何分别处理活动开关的应用最小化

时间:2018-01-24 16:41:05

标签: android android-intent android-activity onresume

我有一个应用程序,当用户第一次打开它或从其他应用程序返回后,它必须要求他输入密码。因此,我创建了输入密码活动,用户输入密码并移至主活动并将EP活动设置为起始活动。然后我想在onRestart()方法中调用Enter Password Activity,当我从另一个应用程序返回我的应用程序时它会起作用,但当我从另一个活动返回主活动时它也会触发。这是不正确的。我需要输入密码活动才能弹出,只有当我从外面回复我的应用程序"。

public class MainActivity extends AppCompatActivity implements RecyclerViewClickListener {

    /../

    @Override
    protected void onRestart() {
        super.onRestart();
        Intent intent = new Intent(getApplicationContext(), EnterPasswordActivity.class);
        startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /../
    }

    /../

    @Override
    public void recyclerViewListClicked(View v, int position) {
        String item = apps.get(position).getName();
        // This is the switch to second activity in app, and i must return 
        // from it witout entering password again
        Intent i = new Intent(getApplicationContext(), DetailedAppInfoActivity.class);
        i.putExtra("appName", item);
        startActivity(i);
    }
}

我的输入密码活动

public class EnterPasswordActivity extends AppCompatActivity {

    EditText enterPass;
    Button button;

    String pass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_enter_password);

        SharedPreferences settings = getSharedPreferences("PREFS",0);
        pass = settings.getString("password","");

        enterPass = findViewById(R.id.mainPassEditText);
        button = findViewById(R.id.confirmPassButton);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String enteredPass = enterPass.getText().toString();
                if(enteredPass.equals(pass)){
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(intent);
                    finish();
                } else{
                    Toast.makeText(EnterPasswordActivity.this,"Incorrect password",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

更新:我已阅读this article,现在我可以控制我的应用前往后台。但是现在我在哪里调用startActivity()?我不能从App类调用它,它说"从Activity上下文之外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?"

1 个答案:

答案 0 :(得分:0)

基本上,您需要跟踪应用程序到达前台时的情况,为此您需要跟踪应用程序生命周期事件。为此,您需要创建一个Handler类来检测应用程序的背景和前景状态,即要执行操作的Application类。

blog将帮助您跟踪该事件