Question

I have a service with registered accelerometer inside. When certain shake pattern is recognized the service starts one activity using this code.

Intent launchIntent = new Intent("my.package.MAIN_ACTIVITY");
LaunchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(LaunchIntent);

At onCreate I use this code snippet to unlock the phone and turn the screen on:

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

If the user don't interact with activity some time I use this code to enable the display to turn off:

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

If the display turns off and phone locks while activity is displayed and I repeat the shake pattern the onStart method is called. I tried to put the same code for turning on and unlocking as above, but it doesn't work (display is not turned on).

What could be the problem?

Was it helpful?

Solution

I managed to solve the problem. When starting my activity I use WakeLock:

PowerManager pm = ((PowerManager) getSystemService(POWER_SERVICE));
screenLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire();

This code will prevent the screen to turn off. But after that I start a timer with delay of few seconds and it disables the WakeLock:

if(screenLock.isHeld()) {
    screenLock.release();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top