私は 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 の問題かどうかはわかりませんが、これを機能させることはできません。電話が点灯し、ロック画面が表示されますが、ダイアログが表示される前にロックが解除されるのを待ちます。この点で助けてくれてありがとう。