A resposta de @paha perde um ponto importante:IntentService não é suficiente. Entre
onReceive() termina e o IntentService é iniciado, o telefone pode adormecer novamente. Você precisa de um bloqueio (estático) para preencher essa lacuna - isso é implementado no WakefulIntentService de Mark Murpphy Portanto, mantenha o AlarmManager e o receiver, mas inicie um
WakefulIntentService do seu onReceive() . Ver:
- Android deep sleep e wake locks
- O wakelock do PowerManager não desperta o dispositivo do serviço