-1

我有一个输入密码对话框,它是 Theme.Dialog 主题中的一个活动,所以它实际上看起来像一个 AlertDialog,因为我必须在广播接收器中使用它,但问题是我想阻止 HOME 按钮,因为我需要它安全应用程序,当我使用它时阻止 HOME 按钮起作用

@Override
public void onAttachedToWindow()
{  
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();  
}

但是如果单击按钮后密码错误,它不会重新启动我的 PasswordDialog 活动,有什么建议吗?

验证码:

login.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        password = inputPassword.getText().toString();               
        final String SHA1hash = PhysicalTheftPassword.getSHA1(password); 

        if (correctSHA1.equals(SHA1hash)) {

            //SharedPreferences sp = getSharedPreferences("isPhysicalTheftEnabled", MODE_WORLD_READABLE);
            //SharedPreferences.Editor ed = sp.edit();
            //ed.putBoolean("isPhysicalTheftEnabled", false);
            //ed.commit();

            Toast.makeText(PhysicalTheftDialog.this, "Correct", Toast.LENGTH_LONG).show();
            finish();   
            stopService(new Intent(PhysicalTheftDialog.this, MyService.class));
            Log.v(TAG, "SHA1 Hash:" + SHA1hash);
            Log.v(TAG, "Correct SHA1:" + correctSHA1);
        }
        else {
            Toast.makeText(PhysicalTheftDialog.this, "Wrong", Toast.LENGTH_LONG).show();
            Intent Act2Intent = new Intent(PhysicalTheftDialog.this, PhysicalTheftDialog.class);              
            finish();
            startActivity(Act2Intent);
            Log.v(TAG, "SHA1 Hash:" + SHA1hash);
            Log.v(TAG, "Correct SHA1:" + correctSHA1);


        }
4

1 回答 1

0

这似乎更像是您在对话框输入按钮上使用的验证问题。而不是在标题状态下无法按下主页按钮。

如果您发布您正在使用的代码,也许我们可以提供帮助。理想情况下,如果密码不正确,您想要做的不是关闭对话框,这样就不需要重新显示它,因为它仍然会显示。

同样提醒一下,没有官方支持的方式来抑制公共 API 中的主页按钮。您用来执行此操作的方法已在较新版本的 Android 中修复,并且不再有效。

编辑: 我有两个建议

如果删除这 3 行:

Intent Act2Intent = new Intent(PhysicalTheftDialog.this, PhysicalTheftDialog.class);              
finish();
startActivity(Act2Intent);

Wrongif 语句的分支内,对话框应在屏幕上保持可见,等待用户重试。你可以做这样的事情而不是这 3 行:

password.setText("");

这将为他们清除密码 EditText,因此他们在重试时不必退格以清除旧的(不正确的)密码。

我的另一个建议是,尝试将这 3 行的顺序更改为:

Intent Act2Intent = new Intent(PhysicalTheftDialog.this, PhysicalTheftDialog.class);              
startActivity(Act2Intent);
finish();

老实说,即使没有主页按钮抑制位,如果这确实适用于您拥有它们的顺序,我会感到有点惊讶。调用完成将(我认为)不允许执行之后发生的任何代码(在这种情况下为),因为一旦您调用通过在完成之前startActivity();调用,您的活动就会消失,它应该允许它正确执行。finish()startActivity()

如果是我,我会努力让它按照我作为第一个建议发布的方式工作。简单地让当前密码对话框显示等待另一次尝试,而不是隐藏它,然后显示同一事物的新实例。

于 2012-07-29T01:50:51.640 回答