2012-07-29 106 views
-1

我有一个输入密码对话框,它是Theme.Dialog主题中的一个活动,所以它看起来像AlertDialog,因为我必须在广播接收器中使用它,但问题是我想阻止HOME按钮因为我需要它的安全应用,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); 


     } 
+0

http://stackoverflow.com/questions/6836869/android-how-to-control-the-home-button?rq=1? – t0mm13b 2012-07-29 00:45:46

+0

我见过有人在做你正在寻找的一个例子。希望能帮助到你! http://stackoverflow.com/a/6530002/1559836 – Mintrus 2012-07-29 00:46:22

+0

这是指的是一些“幻像”Java源* DisableAllKey.java *,谁回答提到的人.... – t0mm13b 2012-07-29 00:49:40

回答

0

这似乎更像是你正在使用你的对话框中输入按钮的验证问题。而不是在您的标题状态下抑制主页按钮时遇到问题。

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

此外,就像没有官方支持的方法来禁止公共API中的主页按钮一样。您正在使用的方法已在更新版本的Android中修复,并且不再有效。

编辑: 我有两个建议

,如果你删除这3行:你的if语句的Wrong分支内

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

对话框应该保持在屏幕等待上可见用户再试一次。你可以做这样的事情,而不是这3行:

password.setText(""); 

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

我的另一个建议,尝试改变那些3行的顺序是这样的:

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

老实说我有点惊讶,如果,它实际上与秩序的工作,你有他们在,即使没有主按钮抑制位。调用完成后(我认为)不允许任何执行后的代码执行(在这种情况下为startActivity();)由于您的活动将在您致电finish()后立即消失通过在完成之前调用startActivity()它应该允许它正确执行。

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

+0

当验证有效时,这段代码是不存在的 – dythe 2012-07-29 14:22:38

+0

如果它不起作用,当你添加这段代码时,在我看来你有2个选项。你可以改变你的验证,以便它*将*在使用这段代码时工作。或者你可以删除上面的代码。我的诚实意见是你应该跟后者。您用来抑制主页按钮的漏洞被创建平台的人视为恶意软件(因此已在更新版本的操作系统中修复)。如果你想和前者一起发布你的验证码,我可以试着帮你纠正它。如果你不愿意这样做,那么我们很难做到。 – FoamyGuy 2012-07-29 14:33:48

+0

用我的验证码更新了帖子。如果它被认为是恶意的,是否还有其他解决方法可以产生相同的效果? – dythe 2012-07-29 15:15:57