Измените ваш код, как показано ниже
public void onStart() {
if(something....) {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
screenReceiver = new ScreenReceiver();
registerReceiver(screenReceiver, filter);
} else {
if(screenReceiver != null) {
unregisterReceiver(screenReceiver);
screenReceiver = null;
}
}
}
Вызов unregisterReceiver () не устанавливает для screenReceiver значение null, и когда элемент управления достигает этого блока, это может не всегда быть так, что ваш получатель зарегистрирован.
например Рассмотрим следующее по порядку:
if(something...)
имеет значение true, поэтому screenReceiver создается и регистрируется.
if(something...)
на этот раз неверно, поэтому screenReceiver не зарегистрирован.
if(something...)
снова имеет значение false, в данном случае экземпляр screenReceiver был создан на шаге 1, следовательно, он не равен нулю, но он не был зарегистрирован на шаге 2, следовательно, исключение «Получатель не зарегистрирован: com.myreceiver.ScreenReceiver@46079370».
После установки screenReceiver
в ноль, рассмотрите выше 3 шага в последовательности. Он будет работать правильно.