Solutions cours smartphone

De Wikilipo.

phonegap

Exercice 1

Cette application n'utilise pas la fonction de la boussole (Compass). Ajoutez un bouton qui indique l'angle que fait le téléphone avec le nord. Afficher la valeur de l'angle avec la fonction notification.alert fournie par phonegap.

  • Solution:

Ajouter un bouton dans index.html

    <a href="#" class="btn large" onclick="read_compass();">Read Compass</a>

Ce bouton appelle la fonction read_compass définie dans main.js. Le reste est copié de la documentation phonegap.

function read_compass(){
    navigator.compass.getCurrentHeading(onCompassSuccess, onCompassError);
}
 
function onCompassSuccess(heading){
    alert('Heading: ' + heading.magneticHeading);
}
 
function onCompassError(compassError){
    alert('Compass Error: ' + compassError.code);
}

Exercice 2

Ce n'est pas pratique d'avoir le nord que quand on appuie un bouton. Modifiez la fonction pour qu'elle affiche l'angle à intervalle régulier, d'une manière similaire à toggleAccel

  • Solution:

La solution est copiée sur la mesure de l'accélération.

Il faut ajouter un élément ou écrire la mesure de la boussole.

    <dl><dt>Heading</dt><dd id="heading">&nbsp;</dd></dl>

Il faut aussi ajouter un bouton pour déclencher et interrompre la mesure:

    <a href="#" class="btn large" onclick="toggleCompass();">Toggle Compass</a>

Le code javascript est presque indentique à celui de toggleAccel:

var compassWatch = null;
 
function updateCompass(heading) {
    document.getElementById('heading').innerHTML = heading.magneticHeading;
}
 
function onCompassError(compassError){
    alert('Compass Error: ' + compassError.code);
}
 
var toggleCompass = function() {
    if (compassWatch !== null) {
        navigator.compass.clearWatch(compassWatch);
        updateCompass({magneticHeading:""});
        compassWatch = null;
    } else {
        var options = {};
        options.frequency = 1000;
        compassWatch = navigator.compass.watchHeading(
                updateCompass, 
                function(ex) {
                    alert("accel fail (" + ex.name + ": " + ex.message + ")");
                }, options);
    }
};
Outils personnels