2012-07-29 155 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