Не отключать экран в действии — не работает с FLAG_KEEP_SCREEN_ON

Итак, долгое время я думал, что знаю, как остановить переход экрана в спящий режим, я просто использовал этот код в своей Activity:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Однако я понял, что это работало только тогда, когда мой телефон находился в «режиме разработчика», то есть когда отладка USB (Настройки -> Параметры разработчика -> Отладка USB) была включена / проверена. Тогда приведенные выше коды действительно останавливают экран/устройство, чтобы перейти в спящий режим.

Когда эта отладка не проверяется, мой экран засыпает, как будто завтра не наступит. Я использую Android 4.04 на своем устройстве, и

 android:minSdkVersion="12"
 android:targetSdkVersion="16"

Кто-нибудь слышал об этой проблеме?

ИЗМЕНИТЬ

Я протестировал с предложением Commonswares и добавил setKeepScreenOn() в код, поэтому он выглядит так:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
View root = findViewById(android.R.id.content); 
if (root != null)
    root.setKeepScreenOn(true);

Я также проверил, чтобы этот код действительно выполнялся, и это так. Но это ничего не меняет...


person Ted    schedule 03.03.2013    source источник
comment
Я попробую, но кажется, что FLAG_KEEP_SCREEN_ON может даже работать, если приложение развернуто через Eclipse, но нет, если я загружу точно такой же код из Google Play. И тем не менее, все в сети говорят, что FLAG_KEEP_SCREEN_ON работает... Я не могу быть единственным с этой проблемой?   -  person Ted    schedule 04.03.2013
comment
Поскольку я никогда не использовал FLAG_KEEP_SCREEN_ON и когда-либо использовал только setKeepScreenOn() (поскольку он проще), я не могу комментировать эффективность вашего кода FLAG_KEEP_SCREEN_ON.   -  person CommonsWare    schedule 04.03.2013
comment
Хорошо, это также не работает с setKeepScreenOn().   -  person Ted    schedule 06.03.2013
comment
Поскольку этот материал работает для многих других разработчиков во многих других приложениях, я бы сказал, что проблема связана с вашим устройством.   -  person CommonsWare    schedule 06.03.2013
comment
Это Samsung S2, версия Android 4.0.4. Звучит слишком популярно, чтобы не работать ... Та же проблема с Samsung S3 Mini, который я купил неделю назад.   -  person Ted    schedule 07.03.2013
comment
github.com/commonsguy/cw-omnibus/tree/master/MiscUI/ Этот пример проекта демонстрирует использование setKeepScreenOn() для отложенного тайм-аута, когда вы хотите, чтобы экран горел некоторое время, но не бесконечно, если пользователь не использует активно ваше приложение. Этот образец успешно работал на всех аппаратных средствах, на которых я его пробовал.   -  person CommonsWare    schedule 07.03.2013
comment
Спасибо за это CommonsWare. Я использую тот же код/методы, что и вы, и не могу понять, почему это не должно работать в моем случае. Я сделаю некоторые отладочные распечатки, так как, похоже, есть какая-то разница, если подключен отладчик, если телефон находится в режиме разработчика и т. д.   -  person Ted    schedule 07.03.2013
comment
Тед, у вас есть такая же проблема с setKeepScreenOn() в представлении?   -  person steveh    schedule 31.03.2013
comment
Я попробовал предложение CommonsWare, и оно отлично работает (я просто использовал setKeepScreenOn() для android.R.id.content без флага FLAG_KEEP_SCREEN_ON). Я также попробовал его без режима разработчика и без функции запуска из Eclipse (я скопировал файл APK на устройство и запустил программу установки), и все работает гладко.   -  person Leeeeeeelo    schedule 26.08.2013
comment
Итак, долгое время спустя я думаю, что экран на самом деле держится нормально, но иногда я видел, что это не так. Но дальше я не смотрел...   -  person Ted    schedule 02.09.2013
comment
Видно ли окно/представление с этим флагом, когда телефон переходит в спящий режим?   -  person Louis CAD    schedule 27.01.2016
comment
Я смотрел на это сегодня и обнаружил, что могу держать экран включенным, если я делаю это в течение OnCreate(). Он работает с использованием любого метода (флаг FLAG_KEEP_SCREEN_ON или View.setKeepScreenOn(true)). Если я попытаюсь оставить экран включенным где-то после OnCreate() (например, на основе ввода пользователя), это не сработает.   -  person mikejonesguy    schedule 26.01.2017


Ответы (2)


Я столкнулся с той же проблемой, я использовал одно действие для своего проекта, а все остальные экраны были фрагментами, тогда я использовал android:keepScreenOn="true" в основном действии.

пожалуйста, попробуйте использовать это и дайте мне знать, если вы не получили желаемого результата.

Спасибо.

person Aman    schedule 26.09.2014

Единственное решение, которое действительно работает в моем приложении, — это WakeLock в основном классе приложения. К сожалению, флаг SCREEN_BRIGHT_WAKE_LOCK устарел!

public class MyApp extends Application {
    PowerManager.WakeLock screenOnWakeLock;
    @Override
    public void onCreate() {
        super.onCreate();
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        wakeLock =  powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"ScreenlockTag");
        wakeLock.acquire();
    }

    @Override
    public void onTerminate()
    {
        if (screenOnWakeLock != null && screenOnWakeLock.isHeld())
            screenOnWakeLock.release();
        super.onTerminate();
    }
}
person Kamil Svoboda    schedule 11.09.2015