Как показать, что экран заблокирован?

В моем приложении мне нужно знать, когда устройство заблокировано (на HTC это выглядит как короткое нажатие на кнопку «питание»). Итак, вопрос: какое событие срабатывает, когда устройство заблокировано? Или устройство уходит в спящий режим?


person Barmaley    schedule 31.05.2011    source источник


Ответы (3)


Вы должны расширить BroadcastReceiver и реализовать onReceive, например:

public class YourBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_SCREEN_OFF.equalsIgnoreCase(intent.getAction())) {
            //screen has been switched off!
        }
    }
}

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

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
appBroadcastReceiver = new AppBroadcastReceiver(yourActivity);
registerReceiver(appBroadcastReceiver, filter);
person pandre    schedule 31.05.2011
comment
Если вы хотите проверить, заблокировано ли устройство, вы можете использовать метод из это решение. К сожалению, нет трансляции для блокировки устройства, но я считаю полезной возможность проверить, заблокировано оно или нет. - person Chris; 07.08.2011

Существует лучший способ:

KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if( myKM.inKeyguardRestrictedInputMode()) {
 //it is locked
} else {
 //it is not locked
}
person Shaul Rosenzweig    schedule 29.12.2011
comment
Пробовали ли вы isDeviceLocked для Android 5.1 developer.android.com/reference /андроид/приложение/? - person Maksim Dmitriev; 03.04.2015

В дополнение к приведенному выше ответу, если вы хотите инициировать какое-либо действие, когда ваше приложение находится на переднем плане:

Вы можете использовать событие с именем onResume(), чтобы активировать собственную функцию, когда ваше приложение привлекает внимание из ранее неактивного состояния, т. е. если ваше приложение находилось в фоновом режиме (приостановлено/свернуто...)

protected void onResume()
{
    super.onResume();

    //call user-defined function here
}
person Augiwan    schedule 31.05.2011
comment
Нет, это не подходит, так как onResume() вызывается каждый раз, когда начинается активность, поэтому нет никакой подсказки, происходит ли это после сна или просто создается - person Barmaley; 31.05.2011
comment
Ага. определенно. просто предложение :) - person Augiwan; 31.05.2011