Согласно официальной документации, BroadcastReceiver для событий блокировки / разблокировки экрана может быть зарегистрирован только динамически (путем вызова registerReceiver изнутри Activity), начиная с Android O (API 26).Регистрация этих событий в AndroidManifest.xml больше не работает, поэтому приложение больше не может получать эти события (ACTION_SCREEN_ON / ACTION_USER_PRESENT), когда приложение не запущено (ранее было убито Android или принудительно закрыто пользователем).
То же самое упоминается в посте: Android - обнаружение события разблокировки телефона, а не экрана на
Есть ли другой альтернативный надежный и возможный способ получения события блокировки / разблокировки экрана?
Пробная неявная трансляция для получения события блокировки / разблокировки экрана путем регистрации ACTION_USER_PRESENT в .xml файле приложения AndroidManifest.Но, согласно документу, прямая трансляция, за исключением некоторых исключений, не будет работатьВы должны сделать это с помощью динамической регистрации registerReceiver в классе деятельности.Таким образом, если приложение уничтожено ОС Android или может быть принудительно остановлено пользователем, широковещательная блокировка / разблокировка экрана приложением не получена.
Приемник динамической широковещательной передачи класса активности
registerReceiver(new PhoneUnlockedReceiver(),
new IntentFilter("android.intent.action.USER_PRESENT"));
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(
Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, add handling here
}
}
}