9

その瞬間だけ、キーガードを永久にバイパスしたくありません。たとえば、アラームが発生したとき(たとえば、目覚ましアラーム)、画面のロックを解除せずにそれを閉じる/スヌーズできます。同じ動作を実現したい.ダイアログを開始したいロックされた画面で一番上にあるはずです。ロックを解除せずにダイアログのボタンをクリックできます。これは可能ですか?

私は次のことを望んでいません:

private void unlockScreen(Context context){
        Log.d("dialog", "unlocking screen now");
        PowerManager powermanager = ((PowerManager)context.getSystemService(Context.POWER_SERVICE));
        WakeLock wakeLock = powermanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        wakeLock.acquire();
        Window wind = DialogActivity.this.getWindow();
        wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);


    }
4

3 に答える 3

5

これは役に立つかもしれません。inFLAG_SHOW_WHEN_LOCKEDとともにウィンドウ フラグを実装するか、class( API 13 では非推奨ですが、引き続き機能します) を使用できます。FLAG_TURN_SCREEN_ONpublic WindowManager.LayoutParams ()

KeyguardManager

public KeyguardManager.KeyguardLock newKeyguardLock (String tag)

代わりにFLAG_DISMISS_KEYGUARDand/orを使用します。FLAG_SHOW_WHEN_LOCKEDこれにより、アプリケーションがフォアグラウンドに出入りするときにキーガードをシームレスに非表示にすることができ、特別なアクセス許可を要求する必要はありません。キーボードをロックまたはロック解除できます。を呼び出して、このクラスのインスタンスを取得しますContext.getSystemService()。このクラスは によってラップされKeyguardManagerます。


WindowManager.LayoutParams


キーガードマネージャー


これで理解できたと思いますが、この問題についてさらに詳細なコーディング手順が必要かどうかお気軽にお尋ねください
。乾杯..

于 2013-07-31T11:50:37.293 に答える
0

次のように、現在のウィンドウにフラグを追加できます。

    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

永続的にしたくない場合は、必要のないときに追加したフラグをクリアするだけで、次のメソッドを使用します: clearFlags(flags)。

于 2013-08-06T09:49:36.973 に答える
-1

あなたの窓のタイプが十分に高く設定されている場合。ロック画面の上にウィンドウを表示できます。

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

于 2013-08-01T11:40:41.473 に答える