2012-07-29 7 views
-1

Theme.Dialog 테마의 활동 인 비밀번호 입력 대화 상자가 있습니다. 따라서 브로드 캐스트 수신기에서 사용해야하므로 실제로 AlertDialog처럼 보이지만 문제는 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

+0

나는 당신이 찾고있는 것을하는 사람의 예를 보았습니다. 희망이 도움이됩니다! http://stackoverflow.com/a/6530002/1559836 – Mintrus

+0

글쎄, 그것은 "phantom"자바 소스 * DisableAllKey.java *를 언급하고있다. – t0mm13b

답변

0

. 타이틀의 상태에 따라 홈 버튼을 누르는 데 문제가있는 것보다.

사용중인 코드를 게시하면 도움이 될 수 있습니다. 이상적으로는 암호가 틀린 경우 대화 상자를 닫지 않아도됩니다. 다시 표시하지 않아도됩니다.

또한 공개 API 내에서 홈 버튼을 표시하지 않는 공식적으로 지원되는 방법은 없습니다. 사용중인 방법은 최신 버전의 Android에서 수정되어 더 이상 작동하지 않습니다.

편집 : 나는이 두 가지 제안

당신이이 3 선 제거하는 경우 : 귀하의 경우 문장의 Wrong 지점 내부

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

를 대화 상자가 대기 화면에 계속 표시한다 사용자가 다시 시도하십시오. 이 대신에이 3 선처럼 뭔가를 할 수 : 그들이 다시 시도 할 때 그들의 오래된 (잘못된) 암호를 지우려면 백 스페이스 할 필요가 없습니다 그들을 위해 암호 글고을 취소합니다

password.setText(""); 

합니다.

내 다른 제안은, 이렇게 될 이들 3 개 라인의 순서를 변경 시도 :

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

을 솔직히 나는 조금 당황 스럽네요이 실제로 순서로 작업 않는 경우 없이도 그들을 있다고 홈 버튼 억제 비트. 완료를 호출하면 그 이후에 발생하는 코드 (이 경우는 startActivity();)를 허용하지 않습니다. finish()으로 전화하는 즉시 작업이 종료되므로 startActivity()을 호출하여 전에 완료하면 올바르게 실행될 수 있어야합니다 .

나는 그것이 내가 첫 번째 제안으로 게시 한 방식대로 작동하도록 노력하는쪽으로 노력할 것입니다. 현재 비밀 번호 대화 상자를 떠나서 다른 시도를 숨기지 않고 동일한 것을 새로운 인스턴스로 보여 주기만하면됩니다.

+0

그렇지 않으면이 코드가 존재하지 않을 때 유효성 검사가 작동합니다. – dythe

+0

이 코드를 추가 할 때 작동하지 않으면 2 가지 옵션이있는 것 같습니다. 이 코드를 사용하는 동안 작동하도록 * 유효성을 변경할 수 있습니다. 또는 위 코드를 제거 할 수 있습니다. 내 솔직한 의견은 후자와 함께 가야한다는 것입니다. 홈 버튼을 억제하기 위해 사용하는 익스플로잇은 플랫폼을 만드는 사람들에 의해 악의적 인 것으로 간주됩니다 (그리고 최신 버전의 OS에서도 수정되었습니다). 이전 버전과 함께 가고 싶다면 유효성 검사 코드를 게시하십시오. 수정 코드를 게시 할 수 있도록 도와 드리겠습니다. 당신도 그렇게하기를 꺼리는 경우, 우리가 할 수있는 일은 거의 없습니다. – FoamyGuy

+0

유효성 검사 코드로 게시물을 업데이트했습니다. 그것이 악의적 인 것으로 여겨지는 경우 동일한 효과를 내기 위해 내가 할 수있는 다른 해결 방법이 있습니까? – dythe