Получение, если экран включен / выключен и если приложение находится в фоновом режиме / на переднем плане - PullRequest
1 голос
/ 10 июня 2011

Я решил опубликовать два вопроса в одном посте, потому что это совершенно та же проблема.

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

Ответы [ 3 ]

11 голосов
/ 27 июня 2013

Добавление ответа для проверки включения / выключения экрана:

// If you use API20 or more:
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
    if (display.getState() != Display.STATE_OFF) {
        return true;
    }
}
return false;

// If you use less than API20:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager.isScreenOn()){ return true; }

Обратите внимание, что Display.getState() также может возвращать STATE_DOZE и STATE_DOZE_SUSPEND, что означает, что экран включен особым образом. Больше информации о Display.getState() и его возвращаемых значениях здесь: http://developer.android.com/reference/android/view/Display.html#getState()

Также обратите внимание, что хотя официальная документация рекомендует использовать isInteractive() вместо isScreenOn(), если вы действительно хотите узнать состояние экрана, Display.getState() является лучшим вариантом из-за «особых» условий, которые устанавливают экран в то время как устройство не является интерактивным.

2 голосов
/ 10 июня 2011

Вы можете узнать, находитесь ли вы на переднем плане или нет, используя обратный вызов onWindowFocusChanged () вашей деятельности;см. http://developer.android.com/reference/android/view/Window.Callback.html

Вы также можете создать широковещательный приемник для захвата событий SCREEN_ON и SCREEN_OFF. Здесь является примером.

...