java.lang. IllegalStateException: Not allowed to start service Intent

postado em: Android | 0

Olá pessoal,

Temos um aplicativo Android que roda uma sincronização em background de tempos em tempos utilizando IntentService (http://www.phaneronsoft.com.br/2018/08/10/iniciar-intentservice-android-com-alarmmanager-e-broadcastreceiver).

Este aplicativo inicialmente foi desenvolvido para rodar até a versão 7 do Android.

Quando o Android 8 foi liberado, migramos o SDK para a versão 27. Feito isso, quando o aplicativo estava em primeiro plano, estava tudo normal. Porém notamos que nos aparelhos com versão 8, quando o aplicativo não está rodando, o serviço de sincronização parou de iniciar automaticamente e gerando a exception java.lang.IllegalStateException: Not allowed to start service Intent.

Após algumas pesquisas, vi que a maneira como o serviço estava sendo iniciado foi alterado para a versão 8, como mostra a documentação de mudanças: https://developer.android.com/about/versions/oreo/android-8.0-changes.

Então foi só ajustar o código para o novo formato que funcionou corretamente.

Formato anterior :

Intent intentService = new Intent(context, SyncIntentService.class);
startService(intentService);

Ajuste para Android 8:

Intent intentService = new Intent(context, SyncIntentService.class);

// Valida a versão do Android. A partir do 8, usar startForegroundService.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    ContextCompat.startForegroundService(context, intentService);

} else {
   startService(intentService);
}

 

Espero ter ajudado!

Comentários são bem-vindos.

Seguir Altieres Bianchi:

Analista Desenvolvedor Mobile e Web, formado pela Universidade Tuiuti do Paraná e pós-graduado pela UTFPR.