web-dev-qa-db-ja.com

画面がロックされているときにアクティビティを表示するにはどうすればよいですか?

私のアプリケーションは、車のドッキングイベントで起動します。デバイスを接続すると、電話をウェイクアップし(システムで実行)、画面のロックを解除します。出来ますか ?

29
Pachanka

私は活動をトップレベルに引き上げるために使用しています

    private Window wind;
    @Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    /******block is needed to raise the application if the lock is*********/
    wind = this.getWindow();
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    /* ^^^^^^^block is needed to raise the application if the lock is*/
}
43
RN3KK Nick

Activity.getWindow()を使用して、アクティビティのウィンドウを取得します。 Window.addFlags()を使用して、WindowManager.LayoutParamsに次のフラグのいずれかを追加します。 FLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON

これが、標準のカードック(およびデスクドック)アプリがこの動作を実装する方法です。

21
hackbod

FLAG_DISMISS_KEYGUARDパターンロックのように、セキュリティが有効になっているロックがない電話のみ。

FLAG_SHOW_WHEN_LOCKEDは現在のアクティビティのみを上部に表示します。ユーザーが他の場所に移動しようとした場合、画面のロックを解除する必要があります。

または、マニフェストに権限を追加することもできます。

<uses-permission Android:name="Android.permission.DISABLE_KEYGUARD"/>

そして、あなたの作成活動では:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard(); 
4
Mitech

ロックパターンまたはピンエントリを使用する場合、画面が5秒未満でオフになるため、次の項目も追加する必要がありました。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
4
Carlos