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