Android держать экран в приложении - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть приложение для Android, которое запускает службу переднего плана, и пока эта служба работает, я хотел бы дать пользователю возможность оставить экран включенным.

Я добавил в свои настройки параметров, флажок предпочтенияи если это правда, я бы хотел оставить экран включенным, но по умолчанию выключить его.Это то, о чем просили мои пользователи.В настоящее время у меня есть предпочтение, но когда я запускаю сервис, мой экран все еще закрывается, вот что я сделал

глобальная переменная

private static final String PREFS_DEVICE = "DeviceInfo";

код и если заявление

SharedPreferences settings = getSharedPreferences(PREFS_DEVICE, 0);
            if(settings.getBoolean("screenPref", false)) {
                final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
                this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
                this.mWakeLock.acquire();
            }

, а затем я добавил это в свой манифест

<uses-permission android:name="android.permission.WAKE_LOCK" />

Есть ли что-то, что я делаю неправильно.Есть ли другой способ сделать это из службы или просто невозможно из службы (надеюсь, что это не так).

Ответы [ 4 ]

3 голосов
/ 13 января 2015

Вы можете использовать флаг FLAG_KEEP_SCREEN_ON

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

и когда вы не хотите продолжать

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
3 голосов
/ 08 сентября 2011

Попробуйте это:

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,         
                            "");    
mWakeLock.acquire();
1 голос
/ 13 сентября 2014

Этот способ намного лучше, если использовать меньше разрешений, услуг и батареи. :

public void setWakelock(Activity Target, boolean State)
{
    if (State) Target.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    else Target.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    return;
}

EDITED

0 голосов
/ 08 сентября 2011

Следуйте шаблону, который Марк Мерфи предоставляет с помощью WakefulIntentService .и вы можете найти объяснение в его книге очень хорошей

...