Как сохранить экран включенным, когда приложение Android работает в фоновом режиме?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сохранить экран включенным, когда приложение Android работает в фоновом режиме?

Сообщение Anonymous »

У меня есть требование к моему приложению для Android, чтобы экран всегда был включен, когда приложение работает (либо на переднем плане, либо в фоновом режиме).
Моя первоначальная попытка была было FLAG_KEEP_SCREEN_ON из параметров WindowManager.Layout в методе onCreate моего основного действия:

Код: Выделить всё

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Однако это работало только тогда, когда действие в данный момент выполнялось на переднем плане. Любое выполнение onPause (закрытие пользовательского интерфейса или переход к новому действию) в конечном итоге приведет к отключению экрана.
После просмотра https://developer.android.com/training/scheduling/ Wakelock и другие потоки, связанные с поддержанием работы приложения в фоновом режиме (например, как заставить приложение Android работать в фоновом режиме, когда экран спит?), последний подход — использовать PowerManager.FULL_WAKE_LOCK из службы, запускаемой при запуске MainActivity. Код ниже:
MainActivity:

Код: Выделить всё

package com.example;

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Keep screen on when app is running in background
Intent i = new Intent(getApplicationContext(), ScreenOnService.class);
startService(i);
}
}
ScreenOnService:

Код: Выделить всё

package com.example;

import android.app.Service;
import android.content.Intent;
import android.os.PowerManager;

public class ScreenOnService extends Service {

private int NOTIFICATION = 1;
private PowerManager.WakeLock wakeLock;

@Override
public void onCreate() {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "KeepScreenOn");
wakeLock.acquire();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}

@Override
public void onDestroy() {
wakeLock.release();
super.onDestroy();
}
}
Теперь после запуска службы экран не будет отключаться при переходе к другим действиям. Однако, если я закрою пользовательский интерфейс, экран все равно в конечном итоге выключится, хотя я вижу, что служба все еще работает. Как предотвратить выключение экрана, даже если приложение работает в фоновом режиме?

Подробнее здесь: https://stackoverflow.com/questions/698 ... background
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»