禁用HOME按钮

时间:2012-07-29 00:35:20

标签: android android-homebutton

我有一个Enter Password Dialog,它是Theme.Dialog主题中的一个Activity,所以它实际上看起来像一个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);


        }

1 个答案:

答案 0 :(得分:0)

这似乎更像是您在对话框输入按钮上使用的验证问题。而不是像你的标题所说的那样压制主页按钮。

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

另外,作为一个提示,没有官方支持的方法来抑制公共API中的主页按钮。您正在使用的方法已在较新版本的Android中修复,不再有效。

修改 我有两个建议

如果删除这3行:

Intent Act2Intent = new Intent(PhysicalTheftDialog.this, PhysicalTheftDialog.class);              
finish();
startActivity(Act2Intent);
在if语句的Wrong分支内,对话框应在屏幕上保持可见,等待用户再次尝试。你可以做这样的事情而不是这3行:

password.setText("");

将清除密码EditText,以便他们再次尝试时不必退格以清除旧的(不正确的)密码。

我的其他建议,请尝试将这3行的顺序更改为:

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

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

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