Java 如何为某个目的禁用反压操作?

Java 如何为某个目的禁用反压操作?,java,android,Java,Android,我有一个使用KeyguardManager的活动 其目的是,如果用户无法成功提供其凭据,则不允许用户使用该应用程序 虽然在应用程序开始时会出现键盘保护意图,但按下设备后退按钮会将该意图移开,显示启动该意图的活动 重写onBackPressed似乎没有帮助,因为它与意图无关 @Override public void onBackPressed() { } @Override protected void onCreate(Bundle savedInstanceState)

我有一个使用KeyguardManager的活动

其目的是,如果用户无法成功提供其凭据,则不允许用户使用该应用程序

虽然在应用程序开始时会出现键盘保护意图,但按下设备后退按钮会将该意图移开,显示启动该意图的活动

重写onBackPressed似乎没有帮助,因为它与意图无关

@Override
  public void onBackPressed() {

  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
    if (km.isKeyguardSecure()) {
      setShowWhenLocked(true);
      Intent i = km.createConfirmDeviceCredentialIntent("Authentication required", "password");
      startActivityForResult(i, CODE_AUTHENTICATION_VERIFICATION);
    }
  }

如果您使用StartTactivity之后的finish会怎么样

编辑:


如果模式为false,则在onActivityResult上添加finish

您想要实现的目标可以通过一个登台活动来实现。例如,您可以使用LoginActivity来检查用户是否通过身份验证,然后从那里决定将其重定向到何处

LoginActivity应该是这样的,当然您需要使其适应您的业务逻辑:

public class LoginActivity extends AppCompatActivity {

    private static final int CODE_AUTHENTICATION_VERIFICATION = 24;
    private boolean isFirstLaunch = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        isFirstLaunch = false;
        //startActivityForResult With your intent to authenticate the user
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == CODE_AUTHENTICATION_VERIFICATION){
            Log.i("LOGIN", "return from key guard");
            //Check the data and decide if you redirect the user to main activity or not
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(!isFirstLaunch){
            Log.i("LOGIN", "resume not first launch");
            // the user tried to cancel the authentication either present him with the authentication process again or finish() the activity
        }
    }
}

请注意,N/B:只有在onBackPressed方法中创建一个由布尔变量控制的条件语句并在onActivityResult中调用它时,即当resultCode!=结果你还好。另一个选项是在resultCode!=结果\u OK moveTaskToBacktrue以下是我的意思:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == INTENT_AUTHENTICATE) {
        if (resultCode == RESULT_OK) {
            //do something you want when pass the security

        } else //resultCode != RESULT_OK
            //Option 1 Ensure you override onBackPressed() with a conditional 
            //statement controlled by a boolean variable.
            onBackPressed();

        //Option 2
        moveTaskToBack(true); //Exit app when a user click the back button.

    }
}

您是否直接在应保护的活动中检查凭据?为什么不引入一个Auth活动,专门负责验证用户身份或告诉他需要登录?谢谢你的建议。这是为了回答我的问题吗?如果你想知道你的业务逻辑是否有一些限制,阻止你这么做,因为我会说这是一种常见的模式,我现在没有限制,请随意回答。我是android编程的初学者,因此可能我不知道该领域的常见问题。正确的方法是创建一个登录活动,该活动将启动keyguard意图,并在用户未进行身份验证时显示错误。在第一个活动中使用finish,如果用户输入了正确的凭据,则您的键盘保护屏幕将被取消,用户将退出应用程序@113408为您提供有效的suggestionstartActivityForResult!=星际触觉。那么,如果用户提供了一个有效的模式呢?在onActivityResult中,你用一个特定的值重新创建了先前的活动,意图是用户提供了一个有效的专利?我不知道,我只是想提出一些建议..嘿,你能给答案加上你的评论吗?我只是在我的onActivityResult中添加了finish,如果模式是错误的。