Теоретически, вы должны иметь возможность добавить BroadcastReceiver
для мониторинга при выключенном экране ACTION_SCREEN_OFF
, а затем запустить это действие.
Из документов :
Broadcast Action: Отправляется, когда устройство переходит в спящий режим и перестает работать в интерактивном режиме.
По историческим причинам имя этого действия широковещания относится к состоянию питания экрана, но оно фактически отправляется в ответ на изменения общего интерактивного состояния устройства.
Эта широковещательная передача отправляется, когда устройство перестает работать в интерактивном режиме. что может не иметь ничего общего с выключением экрана. Чтобы определить фактическое состояние экрана, используйте Display.getState ().
Сначала вам нужно будет создать класс приемника:
public class SomeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
.
.
.
А затем зарегистрировать его:
class MainActivity : AppCompatActivity() {
private val someReceiver = SomeReceiver()
override fun onStart() {
super.onStart()
val intentFilter = IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(someReceiver, intentFilter)
}
override fun onDestroy() {
unregisterReceiver(someReceiver)
super.onDestroy()
}
}
Пожалуйста, имейте в виду новые пределы фонового выполнения и то, что это, скорее всего, не будет тем, что хочет пользователь. Вместо этого рассмотрите планирование JobIntentService
для выполнения пакета работ.
Редактирование
Из-за изменений в Android 7 и 8, изменения, связанные с предельными значениями фонового выполнения приложения, предназначенные для уровня API 26 или выше, больше не могут регистрировать широковещательные приемники для неявных широковещательных рассылок в своем манифесте. Есть некоторые исключения, которые вы можете найти здесь