数年前、私は Android 2 で動作するアラーム アプリを作成しました。現在、Android 4 で動作するようにアップグレードしようとしています。具体的には、Samsung Galaxy S4 で動作します。
Android 2 では、電話がスリープ状態の場合、電話が復帰し、ロック画面の上に「スヌーズまたは解除」画面が表示されます。
Android 4 では、電話を起動しますが、ロックを解除してから通知領域を開き、アラームの通知をクリックしてから [Dismiss] をクリックする必要があります。
私はいつもこのコードを使って目覚めさせてきました:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
この問題に関する8つの異なるスタックオーバーフローの質問を読みました。それらのほとんどは上記のコードを提供します.Android 2では何年も前に機能しましたが、Android 4では機能しませんでした.しかし、どれもこの問題の解決に役立っていません. 私が読んで試した質問は次のとおりです。
Android: Samsung Galaxy S2 デバイスのロック画面をプログラムで削除または無効にする
フルスクリーンの TYPE_SYSTEM_ALERT ウィンドウを表示するには?
ロック画面の上に表示されるアクティビティを作成するにはどうすればよいですか
画面のロックを解除せずにクリックできるダイアログ(アラーム消音/スヌーズなど)を開始する方法
これを引き起こした可能性のある Android 4 の変更点について、何か考えがある人はいますか?
編集:これは、「最小化」されていないアラーム ダイアログについて私が見た最も単純な例の 1 つです。書かれているように、ロック画面には表示されませんが、次の方法で修正できますWindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
FragmentActivity と DialogFragment で記述されていますが、それでも Activity として機能します。AlertDialog.Builder を使用してダイアログを作成しますが、XML レイアウトで実行しようとすると機能しません。なんで?