Ответы:
Одним из вариантов является использование пробуждения от блокировки . Пример из документов:
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);
Мой пример проекта Cordova выглядит так:
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для запуска событий и пробуждения телефона и (вашего приложения), чтобы выполнить то, что вам нужно сделать, а затем снова заснуть: Alarm Manager (источник: commonsware.com)