2. AGENDA
• Hello world / Plugs en andere blabla
• Wat
• Waarom
• Hoe (Foreground en Background)
• Lessons learned
• Q&A
3. HELLO
• Joost van Schaik aka LocalJoost
• Dotnetbyexample
• Windows Platform Development MVP
• 4 open sources libraries, 1 nog actief
• [insert fancy title of the day] @ Vicrea Solutions
• Web development / Geo-ict
8. WAT IS GEOFENCING?
“Geofencing is a technology that defines a virtual boundary
around a real-world geographical area. In doing so, a radius of
interest is established that can trigger an action in a geo-enabled
phone or other portable electronic device.”
Thus speaketh Technopedia
http://www.techopedia.com/definition/14937/geofencing
9. WAAROM
• Notificatie als je ergens in de buurt komt
• Of als je weggaat
• Of als iemand anders (je kind b.v.) ergens in de buurt komt
11. GEOFENCING
• … al een tijdje in Windows 8.x
• … maar wel nieuw in Windows Phone!
• … PCL/Universal apps.
12. TWEE MANIEREN
• Foreground (in actieve app)
• Scenario : wat is hier nu, poor mans’ ‘sathé prikke prikker gis’
• Background task
• Waarschuw me wanneer ik in de buurt ben
15. LESSONS LEARNED (2)
• Kaart voor Windows 8 ->Bing Maps SDK, Native, x64
• Toast notifications in foreground process – beter van niet
• Toast notifications op Windows simulator – überhaupt niet
• Windows Phone emulator superieur aan Windows emulator.
• Partial classes: (nog meer) code sharing
19. LESSONS LEARNED
• Registratie background task iha
• Background task in WinRt component
• Sealed classes, IAsyncOperation<T> ipv Task<T>
• LocationTrigger background tasks : max 1 x per 2 minuten
• Badge logo voor Windows
• Niet zo geschikt voor high-speed, real-time tracking kleine gebieden
• Demonstreren geofencing trigger = tricky business
20. TIPS & TRICKS
• Route mode
• Meerdere korte simulaties
• Initiële positie opzetten dan pas geofences
• Verse start per test
• Scheur niet op hoge snelheid door kleine geofences (of hoge
dwell time)
22. CREDITS / MEER INFO
• http://blog.rajenki.com/2014/04/trigger-background-task-using-geofence-
windows-phone-8-1/
• http://blogs.windows.com/buildingapps/2014/05/28/using-the-windows-phone-
emulator-for-testing-apps-with-geofencing/
• http://wp.qmatteoq.com/how-to-create-and-debug-a-background-task-in-
windows-8-part-2/
• Ook leuk om naar de kijken: SensorCore
23. ALS JE NOG STEEDS NIET GENOEG VAN ME HEBT
http://dotnetbyexample.blogspot.com
@localjoost (80K+ tweets – follow is op
eigen risico)
joostvanschaik@outlook.com
localjoostnl
Editor's Notes
Windows Phone applicatie demonstreren
Opzet applicatie:
Universal app
Twee hulp assemblies, al eens eerder getoond, beetje uitgekleed
MappingUtilities
voor berekenen cirkels op kaart, prachtig stuk wiskunde, (doen als of je het uitlegt)… begrijp ik ook niets van
En het berekenen van cirkels van Geofences – kunnen nl alleen cirkels zijn.
Let op, allemaal leuk PCL. Als source hier gekoppeld om te kunnen laten zien wat ik doe.
En ook één voor Windows, hier zitten alleen methods in om Geopoint <-> Location conversie te doen
Windows Phone 8.1 app
XAML – best wel simpel
XAML.cs – ook niet bar veel
Alles zit in de shared
Manifest – Application/Toast enabled, Capabilities/Location
Shared:
LocationObject
“Database”
Notice: alles heeft een ID
Je weet zeker dat je deze winkels deels niet gaan tegenkomen ;)
MainPage.cs
ToggleGeofences
Maakt fences aan
Tekent ze ook – implementatie in non shared code (moet dus in allebei!!!)
Verwijdert ook fences – ‘t Is tenslotte een toggle
Callback GeofenceStateChanged
AddFence
Daadwerkelijk maken van een Geofence.
Key (string)
Eventuele oude eerst verwijderen
Ik maak standaard 50 meter
Mask - events op enter en exit
Geen single use (iedere hit rapporteren)
Aanmaken dwelling time 1 seconde.
GeofenceStateChanged
Lees fence ‘reports’
Voor elke ‘report’ het ID
En dan bij dat ID het object zoeken.
En dan een toast.
ShowToast – gejatte code. Maak een toast notications. Wel leuk – in shared code.
Windows app demo
Demo beduidende trickier.
Omdat posities moeten worden ingesteld kan dat alleen in simulator
Maar in de simulator werken toast niet. – dus alleen in debug pane zie je wat…
Neem coordinaat uit lijst.
Opzet windows app:
Nagenoeg identiek
Zelfde application settings.
XAML - Bing Maps ipv here Maps
X64, geldt ook voor het MappingUtilities.Windows Project
Alleen wijze waarop je geometries tekent is helaas anders
Layers
Location en LocationCollection
Jammer dat er zoveel divergentie is nog op dit gebied
Maar dat is kaarten en dat is deze keer niet het onderwerp
Demo op Windows Phone
Gaat niet geweldig
Reden: we gebruiken hier een backgrond task. En een LocationTrigger start maximaal 1x per 2 minuten. Real time is dus een tikje overdreven
Structuur project nagenoeg hetzelfde
Er is alleen een Background task project bij gekomen
Declarations/Background tasks/Location + entry point
Dit is een WinRT component.
Dus alleen SEALED classes
Kan geen task retourneren
Dus geen Await? Jawel, maar met een truukje
LocationObject erheen verhuisd want die hebben we ook nodig in de background task.
BackgroundTask zelf:
Enige wat verplicht is, is een public void Run
Van Rajen gepikt: static methods voor register, unregister en checken if registered
Truukje bij register om awaitable te maken.
BackgroundExecutionManager.RequestAccessAsync
SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
ShowToast nog steeds hetzelfde.
Windows Phone project
Indentiek, behalve extra knopje. Dus weer alles in portable of shared classe
Shared project:
ToggleTask – niet echt heksenkunst
ToggleGeofences beetje simpeler (zet geen geolocator aan, heeft geen zin in background task)
Windows 8 project – ook identiek,
alleen knopje erbij.
En badge logo verplicht! (onder visual assets)
Het verschil zit in hoe test je dat ding. Want
Het moet in de simulator, want we moeten een locatie zetten
Maar toasts worden niet getoond, weet je nog?
Om het leuker te maken: background tasks kun je niet registeren op de simulator – geeft exception, omweg
Maar door die omweg gaat de geotrigger niet af
Dus:
Deploy local
Register task
Deploy to simulator
Maak geofences
Zet simulator locatie
Enable toolbar debug/location
Selecteer background taks in lifecycle events dropdown
Background taks activated – één keer.
Resultaat alleen in debug window.