#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. Это было недостающее звено. Спасибо!