Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
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.


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True