Андроид в сервисе как узнать когда экран заблокирован?

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

Что касается действий, я видел, что у нас есть onPause и onRestart для этого, но мне нужно знать, когда экран выключен и когда он включен в службе. Как эта информация может быть получена из службы.

4 ответа

Включение / выключение экрана вызывает системные события. Вы должны слушать эти трансляции и захватывать их. Добавьте это в свой манифест:

<receiver android:name=".ScreenLockBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.USER_PRESENT" />
    <action android:name="android.intent.action.ACTION_SHUTDOWN" />
 </intent-filter>
</receiver>

А затем зарегистрируйте приемник вещания, чтобы захватить его внутри вашего сервиса.

public class ScreenLockBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
            // do stuff
        }
    }
}

Я хочу, чтобы приложение для Android работало в фоновом режиме, я прочитал, что я должен использовать сервисы.

Да, возможно, вам нужно использовать службы, чтобы проверить, включен ли экран или нет. Например в onCreate вашей Services учебный класс.

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver broadcast = new MyBroadcastReciverClass(); //or registerReceiver(broadcast , intentFilter );

На самом деле:

Intent.ACTION_SCREEN_OFF 

или же

Intent.ACTION_SCREEN_ON

Есть 2 основные вещи, которые должны пойти в вашем BroadcastReceiver тоже. Например, в вашем onReceive метод:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        // CODE HERE FOR SCREEN OFF
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        // CODE HERE FOR SCREEN ON
    }

Для более подробного объяснения посмотрите эту статью: https://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/

Вы можете использовать это

KeyguardManager keyguardManager = (KeyguardManager) 
context.getSystemService(Context.KEYGUARD_SERVICE);
if( keyguardManager.inKeyguardRestrictedInputMode()) {
  //it is locked
  } else {
  //it is not locked
}

Надеюсь это поможет.

Используйте эти действия в теге получателя в манифесте

 <action android:name="android.intent.action.SCREEN_ON" />
 <action android:name="android.intent.action.SCREEN_OFF" />
Другие вопросы по тегам