1

ユーザー画面がロックされているかディープ スリープ状態かに関係なく表示されるダイアログ ボックスを表示する必要があります。私の現在のシナリオは次のとおりです。

  1. ブロードキャスト レシーバがサービスを 開始し、WakeLock を取得します

    PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE); lockStatic=mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_NAME_STATIC);

  2. サービスは次の設定でアクティビティを開始します

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

  3. アクティビティはDialogFragmentを開始します

問題は、画面がロックされているかスリープ状態の場合にダイアログが表示されないことです。画面がオフまたはロックされている場合でも、Viber アプリと Line メッセンジャー アプリのメッセージ ダイアログがポップアップします。彼らはどのようにそれを行うのですか?

編集

アクティビティのテーマがTheme.Holo.Light.NoActionBar.Fullscreenまたは Any FULLSCREEN テーマに設定されている場合に機能することがわかりました。:)

4

2 に答える 2

1
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

アクティビティのテーマをに変更した後、これらのフラグが機能しました

Theme.Holo.Light.NoActionBar.Fullscreen
于 2014-09-02T08:19:09.967 に答える
0

KeyGuardManagerを使用してデバイスを自動的にロック解除し、Wake Lock を取得する必要があります。

    KeyguardManager kgm = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
boolean isKeyguardUp = kgm.inKeyguardRestrictedInputMode();
KeyguardLock kgl = kgm.newKeyguardLock("Your Activity/Service name");

if(isKeyguardUp){
kgl.disableKeyguard();
isKeyguardUp = false;
}

wl.acquire(); //use your wake lock once keyguard is down.
于 2014-09-02T05:55:46.693 に答える