Search code examples
androidalarmwakelockandroid-wake-lock

Wake Lock doesn't work


I'm creating an alarm and using the WakeLock to wake the phone when asleep.

I use this code for the wakelock in my Activity:

public void onCreate(Bundle savedInstateState) {
    super.onCreate(savedInstateState);
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mWakeLock = pm.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Wake Log");
    mWakeLock.acquire();
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    setContentView(R.layout.activity_screen);
}

But when time is met, my app crashes with this log cat error:

java.lang.IllegalArgumentException: Must specify a valid wake lock level.

I alreade added permission to AndroidManifest:

<uses-permission android:name="android.permission.WAKE_LOCK" />

I thought i already specify the wakelock level. What can I do to fix this? please help me. Thank you


Solution

  • WindowManager.LaoutParams.FLAG_KEEP_SCREEN_ON is not a valid flag/level for PowerManager.newWakeLock(). You most likely intended it to be:

    PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP.