1

私は Stackoverflow に関する約 10 ~ 15 の投稿を読みましたが、そのすべてに質問者の問題を解決した回答があるようですが、私のケースではそれらの解決策がうまくいかないようです。アラームを設定できるアプリがあり、アプリは電話をウェイクアップする必要があります(これは行います)->デバイスのロックを解除します(そうではありません)->ダイアログを表示します(手動でロックを解除すると、ダイアログが表示されます)

AlarmReceiver によって開始されるアクティビティの OnCreate() に次のコードがあります

KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
    keyguardLock.disableKeyguard();

    final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    win.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

そして、AlarmReceiver クラスの OnReceive 内で、次のコードで静的メソッドである WakeLocker.acquire() メソッドを呼び出します。

public static void acquire(final Context ctx) {
    if (wakeLock != null) wakeLock.release();

    final PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
                              PowerManager.ACQUIRE_CAUSES_WAKEUP |
                              PowerManager.ON_AFTER_RELEASE, "TAG");
    wakeLock.acquire();
}

私の AndroidManifest.xml には次の権限が含まれています

android.permission.WAKE_LOCK
android.permission.DISABLE_KEYGUARD

私は WakefulBroadcastReceiver クラスを使用してブロードキャストを受信し、onReceive 内でダイアログでアクティビティを開始します。私は4.4.4アンドロイドを搭載したサムスンS3を持っています。これが API の問題かどうかはわかりませんが、これを機能させることはできません。電話が点灯し、ロック画面が表示されますが、ダイアログが表示される前にロックが解除されるのを待ちます。この点で助けてくれてありがとう。

4

1 に答える 1

1

アプリのテーマを Dialog.ALert から DeviceDefault.NoActionbar に変更したところ、突然思い通りに動作するようになりました。キーガードの上にダイアログアクティビティを表示することは許可されていないため、私の場合はエラーになると思います。

于 2015-10-24T23:53:46.113 に答える