14

数年前、私は 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 アクティビティ

Androidデバイスがロックされていますが、アラームを鳴らしてダイアログを表示したい

ロック画面上の Android ダイアログ

Android 2.3 でロック画面上のタッチ イベントでダイアログを表示する

これを引き起こした可能性のある Android 4 の変更点について、何か考えがある人はいますか?

編集:これは、「最小化」されていないアラーム ダイアログについて私が見た最も単純な例の 1 つです。書かれているように、ロック画面には表示されませんが、次の方法で修正できますWindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

http://wptrafficanalyzer.in/blog/setting-up-alarm-using-alarmmanager-and-waking-up-screen-and-unlocking-keypad-on-alarm-goes-off-in-android/

FragmentActivity と DialogFragment で記述されていますが、それでも Activity として機能します。AlertDialog.Builder を使用してダイアログを作成しますが、XML レイアウトで実行しようとすると機能しません。なんで?

4

5 に答える 5

2

あなたがリンクした質問の 1 つに、この問題を解決するように見える回答があります。

これは私が使用していて、動作しているように見えるコードです:

@Override
public void onAttachedToWindow() {
        Window window = getWindow();

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

        super.onAttachedToWindow();
    }

また、マニフェストのアクティビティ定義でこれを明示的に宣言しています。

<activity 
    android:name="com.example.MyActivity"
    android:label="@string/app_name"
    android:showOnLockScreen="true"
    >

デフォルトのロック画面での Android アクティビティ

于 2014-01-05T15:10:44.167 に答える