Mam usługę z zarejestrowanym akcelerometrem w środku. Po rozpoznaniu określonego wzorca wstrząsania usługa rozpoczyna jedną czynność przy użyciu tego kodu.
Intent launchIntent = new Intent("my.package.MAIN_ACTIVITY");
LaunchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(LaunchIntent);
W onCreate
Używam tego fragmentu kodu, aby odblokować telefon i włączyć ekran:
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);
Jeśli użytkownik nie wchodzi w interakcję z aktywnością przez jakiś czas, używam tego kodu, aby włączyć wyświetlanie:
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Jeśli wyświetlacz wyłączy się, a telefon zablokuje się podczas wyświetlania aktywności, a ja powtórzę wzór wstrząsania onStart
wywoływana jest metoda Próbowałem umieścić ten sam kod do włączania i odblokowywania jak powyżej, ale to nie działa (wyświetlacz nie jest włączony).
Jaki może być problem?
Odpowiedzi:
4 dla odpowiedzi № 1Udało mi się rozwiązać problem. Zaczynam swoją aktywność WakeLock
:
PowerManager pm = ((PowerManager) getSystemService(POWER_SERVICE));
screenLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire();
Ten kod zapobiegnie wyłączeniu ekranu. Ale potem uruchamiam licznik z opóźnieniem kilku sekund i wyłącza WakeLock
:
if(screenLock.isHeld()) {
screenLock.release();
}