Невозможно создать экземпляр подкласса WakefulIntentService в качестве получателя

#android #commonsware-cwac

#Android #commonsware-cwac

Вопрос:

Я внедряю службу регистрации данных, используя WakefulIntentService и AlarmManager. Однако у меня возникли проблемы с созданием экземпляра получателя. Вот что я получаю, когда пытаюсь запустить приложение.

ОШИБКА / AndroidRuntime(3181): java.lang.RuntimeException: невозможно создать экземпляр получателя my.package.WakefulLoggerIntentService: java.lang.Исключение InstantiationException: my.package.WakefulLoggerIntentService

Вот соответствующие части класса service:

 public class WakefulLoggerIntentService extends WakefulIntentService
{
   public WakefulLoggerIntentService()
   {
      super("WakefulLoggerIntentService");
   }

   @Override
   protected void doWakefulWork( Intent intent )
   {
      // Do the actual data logging.
   }
}
  

Я добавил элемент receiver в свой манифест:

 <receiver android:name=".WakefulLoggerIntentService">
</receiver>
  

И вот часть, которая использует AlarmManager для планирования событий ведения журнала:

   Intent i = new Intent(getApplicationContext(), WakefulLoggerIntentService.class);
  PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
  am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30000, pi);
  

Чего мне не хватает?

Ответ №1:

WakefulLoggerIntentService является Service . Это не BroadcastReceiver .

Для использования WakefulIntentService вам нужен a BroadcastReceiver , который вызывается сигналом тревоги и, в свою очередь, вызывает sendWakefulWork() запуск вашего WakefulLoggerIntentService .

Кроме того, вы должны WakefulLoggerIntentService быть зарегистрированы в манифесте как a <service> , а не a <receiver> .

Комментарии:

1. Это было недостающее звено. Спасибо!