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. и вы можете найти объяснение в его книге очень хороший