代码之家  ›  专栏  ›  技术社区  ›  10101010

如何为意图禁用背压操作?

  •  0
  • 10101010  · 技术社区  · 7 年前

    我有个活动利用 KeyguardManager .

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

    尽管keyguard意图出现在应用程序的开头,但按设备后退按钮会将意图移走,显示启动它的活动。

    重写 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);
        }
      }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Titou    7 年前

    如果在startActivity()之后使用finish()呢?

    编辑:

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

        2
  •  0
  •   113408 Dmitry    7 年前

    你想达到的目标可以通过“登台”来实现 Activity . 例如,您可以 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
            }
        }
    }