startForegroundService() not allowed due to mAllowStartForeground false – B4X ForegroundServiceStartNotAllowedException

ForegroundServiceStartNotAllowedException

L'errore indica che l'app sta tentando di avviare un servizio, anche foreground, mentre si trova in background e Android non lo consente. La correzione documentata consiste nell'usare un Receiver per il lavoro breve attivato da un allarme oppure avviare il foreground service mentre l'attività è visibile.

Cosa significa questo errore?

L'errore indica che l'app sta tentando di avviare un servizio, anche foreground, mentre si trova in background e Android non lo consente. La correzione documentata consiste nell'usare un Receiver per il lavoro breve attivato da un allarme oppure avviare il foreground service mentre l'attività è visibile.

Messaggio originale

startForegroundService() not allowed due to mAllowStartForeground false

Contesto e parole chiave

Alias

  • avvio servizio in background
  • mAllowStartForeground false

Messaggi alternativi

  • Foreground service start not allowed from background

Prodotti

  • B4A
  • Receivers
  • Services

Piattaforme

  • Android 12 e successivi

Parole chiave

  • b4a foregroundservicestartnotallowedexception
  • b4a receiver android 12
  • mAllowStartForeground false

Cause possibili

Avvio del servizio fuori da una finestra consentita

Android limita l'avvio di servizi dal background per ridurre attività invisibili e consumo di risorse. Aggiungere il tipo foreground o il relativo permesso non elimina il vincolo temporale sull'avvio.

molto comune

Diagnosi

Origine della chiamata a StartService o StartForegroundService

Riprodurre il caso dopo aver chiuso o messo in background l'attività e leggere lo stack trace per verificare che l'avvio parta da un alarm, da un servizio o da un altro callback non visibile.

Come leggere il risultato. Se l'attività non è visibile quando parte la chiamata, il rifiuto è la limitazione di background e non un errore di inizializzazione del servizio.

Risoluzione

Spostare il lavoro breve in un Receiver

Difficoltà: mediaRischio: basso

Per notifiche, allarmi e controlli brevi usare un Receiver, lasciando al foreground service soltanto il lavoro lungo avviato in una situazione consentita.

  1. Identificare la chiamata che avvia il servizio mentre l'app è in background.
  2. Usare un Receiver e StartReceiverAt per il lavoro breve dell'allarme.
  3. Avviare un foreground service solo quando l'attività è visibile o in una finestra permessa da Android.

Domande frequenti

Aggiungere un foregroundServiceType risolve questo errore?

No. Il tipo dichiara il lavoro del servizio, ma Android può comunque vietare l'avvio dal background. Per un alarm breve va usato un Receiver.

Approfondimenti

Schede correlate