Как предотвратить программное программирование устройства Android?
Как я могу предотвратить программирование устройства Android?
Ответ 1
Один из вариантов заключается в использовании блокировки бодрствования. Пример из документов:
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();
Там также есть таблица на на этой странице, которая описывает различные типы wakelocks.
Помните, что необходимо соблюдать осторожность при использовании блокировок слежения. Убедитесь, что вы всегда release()
заблокировали, когда закончите с ним (или не на переднем плане). В противном случае ваше приложение может привести к серьезному отказу батареи и использованию ЦП.
В документации также содержится полезная страница, в которой описываются различные подходы к поддержанию работоспособности устройства, и когда вы можете использовать его. Если "запретить устройству переходить в спящий режим" относится только к экрану (и не поддерживает активный процессор), то блокировка слежения, вероятно, больше, чем вам нужно.
Вы также должны быть уверены, что у вас есть разрешение WAKE_LOCK, установленное в манифесте, чтобы использовать этот метод.
Ответ 2
Если вы просто хотите предотвратить спящий режим на определенном View
, просто позвоните setKeepScreenOn(true)
на View
или установите свойство keepScreenOn
на true
. Это предотвратит выключение экрана, пока на экране появится View
. Для этого не требуется специального разрешения.
Ответ 3
Я нашел другое рабочее решение: добавьте следующую строку в свое приложение в событии 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");
}
}
После этого мое приложение не будет спать, пока оно открыто. Спасибо, что anwer отправляется в xSus.
Ответ 4
android:keepScreenOn="true"
может быть лучшим вариантом для XML-макета.
Дополнительная информация: https://developer.android.com/training/scheduling/wakelock.html
Ответ 5
Из корневой оболочки (например, оболочки 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/
Ответ 6
то, что сказал @eldarerathis, является правильным во всех аспектах, блокировка следа - это правильный способ удержания устройства от сна.
Я не знаю, что вам нужно делать приложение, но действительно важно, что вы думаете о том, как архитектор приложения, чтобы вы не заставляли телефон бодрствовать, или время автономной работы сильно пострадает.
Я бы указал вам на этот действительно хороший пример о том, как использовать AlarmManager
для запуска событий и пробуждения телефона и (вашего приложения), чтобы выполнить то, что вам нужно сделать, а затем перейти к sleep снова: Alarm Manager (источник: commonsware.com)
Ответ 7
Установите флаги в окне активности ниже
@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);
}