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?
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With