Toon posts:

Android background messaging service

Pagina: 1
Acties:

Vraag


  • matwork
  • Registratie: Juni 2020
  • Laatst online: 12-06-2020
Goedemorgen,

Wat wil ik bereiken?
Ik wil het voor elkaar krijgen om op een Android telefoon i.c.m. Xamarin Forms een background service te draaien die netwerk berichten ontvangt. De service dient de berichten te verspreiden binnen de applicatie. Zo wil ik eventueel kunnen bepalen of het binnengekomen netwerkbericht als Android Notificatie weergegeven moet worden. Ook wil ik de service vanuit een activity kunnen bedienen en de berichten in een activity kunnen verwerken.

Wat heb ik al werkend?
  • BootCompletedReceiver.
    Een broadcast receiver welke triggered on device boot.
    Deze heeft als taak om de JobService te starten.
  • HubJobService.
    Deze JobService is verantwoordelijk om de connectie naar een server open te houden voor het ontvangen van berichten.
    Binnenkomende berichten worden via een intent met custom explicit action verspreid binnen de applicatie.
  • HubBroadcastReceiver
    Een BroadcastReceiver welke triggered op de custom action van de HubJobService
    Maar.... zie verder
Wat lukt niet?
Het probleem ligt momenteel bij de HubBroadcastReceiver. Deze wordt geactiveerd wanneer een bericht van de server binnenkomt. Maar wanneer ik een notificatie wil tonen zonder foreground service en zonder activity (bij het gebruiken van mijn eigen NotificationManager class) dan wordt de volgende foutmelding weergegeven:
Background execution not allowed: receiving Intent { act=...HUB_MESSAGE_ACTION flg=0x10 } to ...HubBroadcastReceiver
De foutmelding vind plaats bij de OnReceive() van de HubBroadcastReceiver.

Wanneer ik er voor zorg dat de HubBroadcastReceiver een IntentService (NotificationService) start als ForegroundService welke direct een Android Notificatie toont, dan krijg ik de foutmelding niet. Want ik begrijp dat de HubBroadcastReceiver dan gebruik maakt van het process wat op de voorgrond is gestart en dus niet zomaar afgebroken wordt door Android.

Maar ik wil niet dat er constant een Android Notificatie zichtbaar is. Ik wil net zoals bijv. Whatsapp alleen wanneer dat nodig is een notificatie tonen, maar wel controlle hebben over de communicatie met mijn server.

Overzicht van de opstelling


Hierbij is MessageReceiver de HubBroadcastReceiver.

Informatie over opstelling
Android versie: 8.0.0
Android SDK: Android SDK Platform 28

Mijn vragen:
  • Is deze opstelling juist?
  • Wat kan ik er aan veranderen zodat ik het wel op de achtergrond kan laten draaien?

[Voor 3% gewijzigd door matwork op 12-06-2020 12:20]

Alle reacties


  • matwork
  • Registratie: Juni 2020
  • Laatst online: 12-06-2020
Heb net nog eens deze pagina doorgelezen. En ik begrijp hieruit dat aangeraden worden om gebruik te maken van JobServices ipv BroadcastReceiver via de Manifest.
https://developer.android.com/about/versions/oreo/background

Heb dus de HubBroadcastReceiver laag er uit gehaald. En nu lijkt het wel te werken. Dan maar alleen de BroadcastReceiver gebruiken icm Activities. Achtergrond taken worden dan via de JobService uitgevoerd.

Heel fijn die verwarringen die ontstaan door API wijzigingen tussen Android versies.


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee