-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);


        }
4

1 に答える 1

0

ダイアログの入力ボタンで使用している検証の問題のようです。あなたのタイトルが示すように、ホームボタンを抑制するのに苦労するのではなく.

そのために使用しているコードを投稿していただければ、おそらく私たちがお手伝いできます。理想的には、パスワードが正しくない場合にダイアログを閉じないことです。その場合、ダイアログはまだ表示されているため、再表示する必要はありません。

また、パブリック API 内でホーム ボタンを非表示にする公式にサポートされている方法はありません。これを行うために使用している方法は、Android の新しいバージョンでは修正されており、機能しなくなりました。

編集: 2つの提案があります

これらの 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();

正直なところ、ホームボタンの抑制ビットがなくても、それが実際にあなたが持っていた順序で機能する場合、私は少し驚いています. finish を呼び出すと、その後に発生するコード (この場合は ) を実行することはできません (私が思うに) startActivity();。あなたのアクティビティは呼び出すとすぐに消えてしまうので、 finish の前にfinish()呼び出すことで、適切に実行できるはずです。startActivity()

それが私だったら、最初の提案として投稿した方法で機能させるように努力します。現在のパスワードダイアログを非表示にしてから同じものの新しいインスタンスを表示するのではなく、別の試行を待機するように表示したままにします。

于 2012-07-29T01:50:51.640 に答える