Как понять, что пользователь ушел в спящий режим?

Рейтинг: 0Ответов: 1Опубликовано: 07.12.2014

Как понять, что пользователь ушел в спящий режим, ну, типа на блокировку нажал?

Ответы

▲ 2

Надо ставить BroadcastReceiver, который ловит событие: android.intent.action.SCREEN_OFF

Декларация в манифесте:

<receiver android:name="MyReceiver" android:enabled="true">   
 <intent-filter>
    <action android:name="android.intent.action.SCREEN_OFF"/>
 </intent-filter>
</receiver>

собсно сам ресивер:

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {    
        Log.i("MyReceiver", "Bingo! Screen off!");
    }
}

Update

Здесь есть одна небольшая западня. Если продекларировать в манифесте с ключом exported=true (в данном случае он по дефолту true), то ресивер будет работать всегда (с момента установки аппы до его сноса) - то есть будет ловить бродкасты даже если приложение не работает.

Надо быть аккуратным с этим, легко можно нарваться на грубость со стороны системы. Более подробно об этом здесь