Відповіді:
Один з варіантів - використовувати фіксатор . Приклад із документів:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
На цій сторінці також є таблиця, яка описує різні типи годин.
Майте на увазі, що потрібно користуватися певною обережністю при використанні блокувальників. Переконайтесь, що ви завжди release()блокуєте, коли закінчите з ним (чи не на передньому плані). Інакше ваш додаток може призвести до серйозного розряду акумулятора та використання процесора.
Документація також містить корисну сторінку, яка описує різні підходи до збереження спокою пристрою та коли ви можете вибрати такий. Якщо "запобігання пристрою спати" посилається лише на екран (а не підтримує центральний процесор активним), то, можливо, блокування пробудження, мабуть, більше, ніж потрібно.
Ви також повинні бути впевнені, що у вашому маніфесті встановлено дозвіл WAKE_LOCK , щоб використовувати цей метод.
Якщо ви просто хочете заборонити сплячий режим у певному режимі View, просто зателефонуйте setKeepScreenOn(true)до цього Viewабо встановіть keepScreenOnвластивість true. Це не дозволить екрану не вимикатися, поки він Viewзнаходиться на екрані. Для цього не потрібно спеціального дозволу.
setKeepScreenOn(true)воля набуває чинності лише тоді, коли вона Viewбуде видимою.
Я знайшов ще одне робоче рішення: додайте наступний рядок у свій додаток під подією onCreate.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Мій зразок проекту Кордова виглядає так:
package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;
public class ScanManActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
super.loadUrl("http://stackoverflow.com");
}
}
Після цього мій додаток не буде спати, поки він відкритий. Дякуємо за відповідь на xSus.
android:keepScreenOn="true" може бути кращим варіантом мати від макета XML.
Більше інформації: https://developer.android.com/training/scheduling/wakelock.html
Встановіть прапори у вікні діяльності, як показано нижче
@Override public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
З кореневої оболонки (наприклад, оболонки adb) ви можете заблокувати за допомогою:
echo mylockname >/sys/power/wake_lock
Після цього пристрій залишиться неспаним, поки ви не зробите:
echo mylockname >/sys/power/wake_unlock
З тим самим рядком для "mylockname".
Зауважте, що це не заважатиме екрану чорніти, але заважатиме процесору спати.
Зауважте, що / sys / power / wake_lock - це читання-запис для користувацького радіо (1001) та групової системи (1000), і, звичайно, root.
Посилання тут: http://lwn.net/Articles/479841/
те, що сказав @eldarerathis, є правильним у всіх аспектах, блокування невідомого сигналу - це правильний спосіб утримання пристрою від сну.
Я не знаю, що вам потрібно робити, але дуже важливо подумати про те, як архітектувати ваше додаток, щоб ви не змушували телефон не залишатись спокійним за те, що вам потрібно, або час життя батареї сильно постраждає.
Я хотів би вказати на цей дійсно хороший приклад того, як користуватися AlarmManagerпожежними подіями та пробуджувати телефон та (ваш додаток) виконувати те, що вам потрібно зробити, а потім знову спати: Менеджер сигналізації (джерело: commonsware.com)