Plug-ins maken de brug tussen de hardware van het apparaat (GPS-sensor, camera, netwerk,…) en de functionaliteiten (adresboek, kalender,…) die normaal niet beschikbaar zijn voor web-apps.
Een plug-in bestaat uit één Javascript-bestand met bijbehorende native-code per platform. In onze code hoeven we enkel te verwijzen naar een bepaalde functie of methode uit het Javascript-bestand. Van wat er in de achtergrond gebeurt (de communicatie vanuit javascript met de native code) hoeven wij ons niets aan te trekken.
Apache onderhoudt zelf een aantal plug-ins, maar het systeem is volledig open zodat ook andere ontwikkelaars eigen plug-ins kunnen schrijven.
Je kan zoeken naar beschikbare plug-ins op:
In dit hoofdstuk leer je hoe je een plug-in installeert en aanspreekt. De gegevens die je terugkrijgt van de hardware worden op het scherm getoond en op het einde verwerkt in een praktische toepassing.
$ cordova create plugins be.uwnaam.plugins Plugins
$ cd plugins
$ cordova platform add browser android
$ phonegap serve
We gaan de toepassing volledig opbouwen rond een single page application of
SPA. Voorlopig is hier nog niets van te merken.

Bij het openen van de app moet enkel het eerste onderdeel (het eerste tabblad) zichtbaar zijn. Dit kunnen
we
makkelijk vanuit CSS verwezenlijken. Merk op dat ieder onderdeel een unieke naam heeft
(div#tabDevice, div#tabNetwork en div#tabCompass) en een
gemeenschappelijke klasse (div.spa).
.spa en #tabDevice
toe:De navigatielinks kregen een data-show-attribuut. Hierin staat de tab vermeld die getoond
moet
worden als je op de link klikt. De navigatie is reeds in op de index-pagina aanwezig maar de interactie
ga je nu
aan app.js toevoegen.
$(function(){ ... } volgende code toe:Telkens je een navigatielink aanklikt, worden alle tabs gesloten (lijn 4). Op lijn 5 wordt de waarde van
het
attribuut data-show uitgelezen. Dit gebruiken we om de gewenste tab terug zichtbaar te
maken.
Bijvoorbeeld: data-show="tabDevice" genereert de code $('#tabDevice').show().
Als laatste wordt op lijn 6 de navigatie terug gesloten.
In deze toepassing worden drie plug-ins gebruikt. Deze gaan we eerst installeren.
$ cordova plugin add cordova-plugin-device
$ cordova plugin add cordova-plugin-network-information
$ cordova plugin add cordova-plugin-device-orientation
$ cordova plugin add cordova-plugin-device cordova-plugin-network-information cordova-plugin-device-orientation
De geïnstalleerde plug-ins komen in de map plugins te staan. In onze code hoeven we
niets te
wijzigen.
Je mag zelfs geen verwijzing leggen naar de bijbehorende javascript-documenten. Telkens je de applicatie
compileert, zullen de juiste verwijzingen automatisch in de code worden aangebracht.
Tip: je kan een plug-in verwijderen met het commando
$ cordova plugin remove <plug-in>
Met de plug-in cordova-plugin-device kunnen we o.a. informatie over het toestel en het platform opvragen. Lees aandachtig de documentatie. Kijk ook altijd naar de opmerkingen (quirks) die staan vermeld. Niet alle eigenschappen zijn op alle platformen beschikbaar!
Voorlopig wordt enkel de tekst Device info op het scherm getoond. Deze tekst gaan we nu vervangen door nuttige informatie over ons toestel.
console.log(device) toe.console.log(device)
kan je de inhoud van het JSON-object visualiseren in de console en hieruit de relevante informatie
filteren.
Voorlopig testen we nog in de browser en is de info vrij beperkt.

data.
De plug-in cordova-plugin-network-information geeft ons informatie over onze netwerkverbinding. Is het netwerk actie, zijn we geconnecteerd met WiFi of via 4G, enz …
Aan de hand van deze informatie kunnen we beslissen of een bepaalde actie al dan niet wordt uitgevoerd. Stel dat je een app ontwikkelt waarmee je foto’s kan nemen en deze uploadt naar je Dropbox, dan ga je het uploaden waarschijnlijk enkel uitvoeren als je via WiFi verbonden bent en niet via 3G of 4G.
Het voorbeeld over connection.type kunnen we bijna integraal overnemen in onze app. Enkel de laatste lijn (de alert-box) gaan we vervangen door een melding op de pagina.
_getState().
h5#networkState.Merk op dat de connectie enkel tijdens het opstarten van de applicatie wordt getest. Als je de verbinding verbreekt of wijzigt, zal er op het scherm niets veranderen. Dit kunnen we makkelijk oplossen door op regelmatige tijdstippen het netwerk opnieuw te testen.
Volgens de Cordova 8 documentatie is de device-orientation plug-in verouderd en kan je nu de native orientation API gebruiken. Om compatibel te blijven met oudere Android devices, gaan we de plug-in alsnog integreren.
Met de plug-in cordova-plugin-device-orientation krijg je toegang tot het kompas van je smartphone. De kompas-sensor detecteert de richting van de bovenkant van het apparaat ten opzichte van het noorden (noorden = 0°).
Op de index-pagina staat een tekstveld (h5#compass), een pijltje (<p>▼</p>),
een kompasroos (img#compassImg) en twee knoppen (a#startCompass en
a#stopCompass). Voorlopig gaan we enkel de richting uitlezen en in het tekstveld
h5#compass schrijven. In de opdracht die volgt, ga je de overige elementen verwerken.
De plug-in is al iets complexer en heeft drie methodes die we kunnen gebruiken:
navigator.compass.getCurrentHeading(compassSuccess, compassError)var watchID = navigator.compass.watchHeading(compassSuccess, compassError,
[compassOptions])navigator.compass.clearWatch(watchID);De tweede methode hebben we nodig voor onze toepassing. We gaan continu de richting meten en op het scherm tonen. Als we de voorbeeldcode vertalen naar onze module, wordt dit:
Elke twee seconden wordt er een nieuwe meting uitgevoerd. Het resultaat verschijnt in de console (console.log(heading)).
Hier kunnen we uit afleiden dan heading.magneticHeading de richting bevat. Dit getal halen
op en
wordt op lijn 3 afgerond naar een geheel
getal.
Het geheel getal wordt samen met de tekst-variabele txt doorgegeven naar de methode _update(txt,
degr). De methode _update(txt, degr) toont de tekst op het scherm. (De
parameter degr
wordt op dit moment nog niet gebruikt. Deze heb je straks pas nodig.)
Het kompas blijft continu waardes meten. Ook als de applicatie naar de achtergrond verdwijnt, blijven de metingen doorlopen.Om het verbruik te beperken en de batterij te sparen, ga je de applicatie zodanig herwerken dat je het kompas met de knoppen START en STOP kan bedienen. Dit zijn de voorwaardes:
init-methode in js/compass.js leeg.#startCompass. Dit event verwijst naar
Compass.start(),
dat op zijn beurt het kompas eerste stopt en dan terug start.
#stopCompass. Dit event verwijst naar
Compass.stop().
Deze methode stopt de meting.
img#compassImg rond
zijn
middelpunt kan draaien. Verwerk de gemeten waarde degr in de rotatie.
Voor een nauwkeurige meting moet je het kompas van je smartphone regelmatig kalibreren. Dit kan je doen
in de
Google Maps-app.
Voor een Samsung-device kan je volgende procedure uitvoeren:
*#0*# in.