Android держать экран в приложении

У меня есть приложение для 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 ответа

Решение

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

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,         
                            "");    
mWakeLock.acquire();

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

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

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

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

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

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;
}

РЕДАКТИРОВАНИЕ

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

Другие вопросы по тегам