Как я могу предотвратить программирование устройства 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.

Ответ 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);
}