Андроид в сервисе как узнать когда экран заблокирован?
Я хочу справиться с работой приложений 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" />