« Phonegap sample project » : différence entre les versions
Aucun résumé des modifications |
|||
(21 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
Ce projet est une bonne démonstration des fonctionnalités auxquelles phonegap permet d'accéder. Le projet se trouve sous H:/callback-phonegap-9f0856d/Android/Sample. Il faut le copier sous | == copier l'exemple phonegap == | ||
Ce projet est une bonne démonstration des fonctionnalités auxquelles phonegap permet d'accéder. Le projet se trouve sous H:/callback-phonegap-9f0856d/Android/Sample. Il faut le copier sous I:/work. | |||
== exécuter l'application == | == exécuter l'application == | ||
=== exécuter dans l'émulateur ripple === | === exécuter dans l'émulateur ripple === | ||
Ouvrir chrome à cette adresse: file:/// | Ouvrir chrome à cette adresse: file:///I:/work/Sample/assets/www/index.html. | ||
Un click droit ouvre un menu avec Emulator, choisir enable. | Un click droit ouvre un menu avec Emulator, choisir enable. | ||
=== importer le projet dans eclipse === | === importer le projet dans eclipse === | ||
# dans le projet Sample, effacer project.properties. Ce fichier est automatiquement généré par eclipse. | |||
# File>New>Other | # File>New>Other | ||
# Android>Android project | # Android>Android project | ||
Ligne 17 : | Ligne 20 : | ||
# L'erreur de compilation disparait | # L'erreur de compilation disparait | ||
=== exécuter sur un téléphone android === | (A un moment j'ai eu problème avec project.properties, il a fallu écrire à la main la valeur target=android-14. Mais ce problème ne s'est pas reproduit) | ||
=== construire l'application et l'exécuter sur un téléphone android === | |||
# installer le driver usb pour adb de l'appareil | # installer le driver usb pour adb de l'appareil | ||
Ligne 25 : | Ligne 30 : | ||
# dans eclipse, click droit sur Sample, Run As>1 Android Application | # dans eclipse, click droit sur Sample, Run As>1 Android Application | ||
# l'application démarre sur le téléphone | # l'application démarre sur le téléphone | ||
Une autre solution: | |||
# Autoriser l'installation d'applications ne provenant pas d'Android Market: Réglages > Applications > Sources inconnues | |||
# dans eclipse, click droit sur Sample, Run As>1 Android Application. L'application est construite sous la forme du fichier bin/Sample.apk | |||
# copier le fichier bin/Sample.apk sur le téléphone, par exemple dans le répertoire download. | |||
# ouvrir un explorateur et appuyer sur Sample.apk | |||
# accepter l'installation | |||
Une autre solution pour construire le fichier apk | |||
# mettre tous les fichiers du répertoire assets/www dans une archive zip | |||
# ouvrir un compte sur https://build.phonegap.com/ | |||
# uploader le fichier zip. | |||
# attendre un peu | |||
# télécharger le fichier apk. | |||
== examiner l'exemple == | == examiner l'exemple == | ||
Les fichiers de l'application sont sous Sample/assets/www/ | Les fichiers de l'application sont sous Sample/assets/www/ | ||
index.html | '''index.html''' | ||
* inclut les autres fichiers: phonegap.js, main.js, master.css | * inclut les autres fichiers: phonegap.js, main.js, master.css | ||
* appelle des fonctions javascript dans body onload et a onclick | * appelle des fonctions javascript dans body onload et a onclick | ||
main.css | '''main.css''' | ||
* définit les styles des éléments | * définit les styles des éléments | ||
main.js | '''main.js''' | ||
* contient les fonctions javascript appelées dans index.html | * contient les fonctions javascript appelées dans '''index.html''' | ||
Le code javascript utilise des objets javascript créés par phonegap.js comme ''device'', navigator.''accelerometer''. Ces objets ne sont disponible qu'après l'initialisation de phonegap, qui est signalée par l'événement ''deviceready'' | Le code javascript utilise des objets javascript créés par phonegap.js comme ''device'', navigator.''accelerometer''. Ces objets ne sont disponible qu'après l'initialisation de phonegap, qui est signalée par l'événement ''deviceready'' | ||
=== init === | |||
La fonction '''init''', appelée au chargement d'index.html fait en sorte que la fonction ''deviceInfo'' n'est appelée que quand phonegap est prêt. La fonction deviceInfo lit des propriétés de l'objet device, comme device.platform etc... | La fonction '''init''', appelée au chargement d'index.html fait en sorte que la fonction ''deviceInfo'' n'est appelée que quand phonegap est prêt. La fonction deviceInfo lit des propriétés de l'objet device, comme device.platform etc... | ||
< | <source lang="javascript"> | ||
function init() { | function init() { | ||
document.addEventListener("deviceready", deviceInfo, true); | document.addEventListener("deviceready", deviceInfo, true); | ||
} | } | ||
</ | </source> | ||
=== beep === | |||
Les autres fonctions, comme '''beep''', sont appelées lorsqu'on clique sur un bouton. | Les autres fonctions, comme '''beep''', sont appelées lorsqu'on clique sur un bouton. | ||
< | <source lang="html5"> | ||
<a href="#" class="btn large" onclick="beep();">Beep</a> | <a href="#" class="btn large" onclick="beep();">Beep</a> | ||
</ | </source> | ||
'''beep''' est une fonction très simple: | '''beep''' est une fonction très simple: | ||
< | <source lang="javascript"> | ||
var beep = function() { | var beep = function() { | ||
navigator.notification.beep(2); | navigator.notification.beep(2); | ||
}; | }; | ||
</ | </source> | ||
=== show_pic === | |||
'''show_pic''' est plus compliquée, elle passe à getPicture les fonctions '''dump_pic''' et '''fail'''. '''fail''' est appelée s'il y a eu un problème. | '''show_pic''' est plus compliquée, elle passe à getPicture les fonctions '''dump_pic''' et '''fail'''. '''fail''' est appelée s'il y a eu un problème. | ||
< | <source lang="javascript"> | ||
function show_pic() { | function show_pic() { | ||
navigator.camera.getPicture(dump_pic, fail, { | navigator.camera.getPicture(dump_pic, fail, { | ||
Ligne 66 : | Ligne 87 : | ||
}); | }); | ||
} | } | ||
</ | </source> | ||
=== dump_pic === | |||
'''dump_pic''' s'occupe de la photo en cas de succès. Elle reçoit en argument les données de la photo. | '''dump_pic''' s'occupe de la photo en cas de succès. Elle reçoit en argument les données de la photo. | ||
< | <source lang="javascript"> | ||
function dump_pic(data) { | function dump_pic(data) { | ||
//... | //... | ||
document.getElementById("test_img").src = "data:image/jpeg;base64," + data; | document.getElementById("test_img").src = "data:image/jpeg;base64," + data; | ||
} | } | ||
</ | </source> | ||
Pour savoir exactement comment utiliser ces fonctions, on peut aussi consulter l'excellente documentation de phonegap | Pour savoir exactement comment utiliser ces fonctions, on peut aussi consulter l'excellente documentation de phonegap | ||
http://docs.phonegap.com/en/1.2.0/phonegap_camera_camera.md.html#Camera | http://docs.phonegap.com/en/1.2.0/phonegap_camera_camera.md.html#Camera | ||
Pour chaque fonctionnalité, la documentation indique aussi sur quels plateformes elle est disponible. | |||
< | === toggleAccel === | ||
'''toggleAccel''' est la plus compliquée des fonctions de l'exemple | |||
<source lang="javascript"> | |||
var accelerationWatch = null; | var accelerationWatch = null; | ||
Ligne 103 : | Ligne 129 : | ||
options.frequency = 1000; | options.frequency = 1000; | ||
accelerationWatch = navigator.accelerometer.watchAcceleration( | accelerationWatch = navigator.accelerometer.watchAcceleration( | ||
updateAcceleration, function(ex) { | updateAcceleration, | ||
function(ex) { | |||
alert("accel fail (" + ex.name + ": " + ex.message + ")"); | alert("accel fail (" + ex.name + ": " + ex.message + ")"); | ||
}, options); | }, options); | ||
} | } | ||
}; | }; | ||
</ | </source> | ||
Ici c'est plus simple de regarder d'abord la documentation. http://docs.phonegap.com/en/1.2.0/phonegap_accelerometer_accelerometer.md.html#Accelerometer | |||
Phonegap fournit trois méthodes pour l'accéléromètre, et ce code n'en utilise que deux: '''watchAcceleration''' et '''clearWatch'''. | |||
* '''watchAcceleration''' fait en sorte qu' à intervalle régulier '''updateAcceleration''' est appelée avec les données de l'accéléromètre | |||
* L'appel à '''watchAcceleration''' retourne une variable d'identification appelée dans l'exemple '''accelerationWatch''' . Pour interrompre les mesures d'accélération, on peut appeler '''clearWatch(accelerationWatch)''' | |||
* On voit que la fonction '''toggleAccel''' déclenche la mesure de l'accélération la première fois qu'elle est appelée. A l'appel suivant elle interrompt la mesure, et à l'appel d'après elle le remet en marche etc... | |||
== exercices == | |||
# 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. | |||
# 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'''. | |||
[[solutions cours smartphone|solutions]] | |||
== autres fonctionnalités de phonegap == | |||
Comme on peut voir dans la documentation, phonegap donne l'accès à d'autres fonctionnalités du téléphone: | |||
* '''Capture''' permet d'enregistrer de l'audio, des vidéos et des photos | |||
* '''Connection''' permet de savoir si l'appareil est connecté à internet | |||
* '''Contacts''' donne accès au carnet d'adresses | |||
* '''Events''' permet de réagir à des évènements propres au téléphone. Nous avons déjà vu | |||
** '''deviceready''' est lancé quand phonegap est initialisé. | |||
** '''pause'''/'''resume''' sont déclenchés quand l'application est mise en arrière/avant-plan. | |||
** '''online'''/'''offline''' signalent la connexion/deconnexion à internet | |||
** '''batterycritical''', '''batterylow''', '''batterystatus''' réagissent à des changement du niveau de batterie. | |||
** '''backbutton''', '''menubutton''', '''searchbutton''' etc... signalent qu'un bouton a été pressé sur le téléphone, et ne sont disponibles que sur les téléphones qui ont ces boutons | |||
* '''File''' permet d'écrire et de lire des fichiers sur le téléphone. | |||
* '''Geolocation''' donne la latitude et longitude du téléphone. (Cette information est aussi disponibles au pages web). | |||
* '''Media''' permet d'enregistrer et de lire des fichiers audio. | |||
* '''Storage''' donne l'accès à une base de donnée relationnelle avec laquelle on peut communiquer avec le langage SQL. |
Dernière version du 8 décembre 2011 à 23:55
copier l'exemple phonegap
Ce projet est une bonne démonstration des fonctionnalités auxquelles phonegap permet d'accéder. Le projet se trouve sous H:/callback-phonegap-9f0856d/Android/Sample. Il faut le copier sous I:/work.
exécuter l'application
exécuter dans l'émulateur ripple
Ouvrir chrome à cette adresse: file:///I:/work/Sample/assets/www/index.html. Un click droit ouvre un menu avec Emulator, choisir enable.
importer le projet dans eclipse
- dans le projet Sample, effacer project.properties. Ce fichier est automatiquement généré par eclipse.
- File>New>Other
- Android>Android project
- name: Sample, (x) Create project from existing source, Location: H:/work/Sample
- next version Android 4.0, next minimum SDK 10(10 Android 4.0), finish
- il y a des erreurs de compilation
- dans l'arborescence Sample>libs>phonegap-1.1.0.jar, click droit Build Path>Add to Build Path
- L'erreur de compilation disparait
(A un moment j'ai eu problème avec project.properties, il a fallu écrire à la main la valeur target=android-14. Mais ce problème ne s'est pas reproduit)
construire l'application et l'exécuter sur un téléphone android
- installer le driver usb pour adb de l'appareil
- le brancher le téléphone sur usb
- (si on a rooté son appareil, on peut travailler sans usb avec l'app adbWireless)
- autoriser le débogage sur le téléphone: Réglages>Applications>Développement>Débogage USB
- dans eclipse, click droit sur Sample, Run As>1 Android Application
- l'application démarre sur le téléphone
Une autre solution:
- Autoriser l'installation d'applications ne provenant pas d'Android Market: Réglages > Applications > Sources inconnues
- dans eclipse, click droit sur Sample, Run As>1 Android Application. L'application est construite sous la forme du fichier bin/Sample.apk
- copier le fichier bin/Sample.apk sur le téléphone, par exemple dans le répertoire download.
- ouvrir un explorateur et appuyer sur Sample.apk
- accepter l'installation
Une autre solution pour construire le fichier apk
- mettre tous les fichiers du répertoire assets/www dans une archive zip
- ouvrir un compte sur https://build.phonegap.com/
- uploader le fichier zip.
- attendre un peu
- télécharger le fichier apk.
examiner l'exemple
Les fichiers de l'application sont sous Sample/assets/www/ index.html
- inclut les autres fichiers: phonegap.js, main.js, master.css
- appelle des fonctions javascript dans body onload et a onclick
main.css
- définit les styles des éléments
main.js
- contient les fonctions javascript appelées dans index.html
Le code javascript utilise des objets javascript créés par phonegap.js comme device, navigator.accelerometer. Ces objets ne sont disponible qu'après l'initialisation de phonegap, qui est signalée par l'événement deviceready
init
La fonction init, appelée au chargement d'index.html fait en sorte que la fonction deviceInfo n'est appelée que quand phonegap est prêt. La fonction deviceInfo lit des propriétés de l'objet device, comme device.platform etc... <source lang="javascript"> function init() {
document.addEventListener("deviceready", deviceInfo, true);
} </source>
beep
Les autres fonctions, comme beep, sont appelées lorsqu'on clique sur un bouton. <source lang="html5"> <a href="#" class="btn large" onclick="beep();">Beep</a> </source>
beep est une fonction très simple: <source lang="javascript"> var beep = function() {
navigator.notification.beep(2);
}; </source>
show_pic
show_pic est plus compliquée, elle passe à getPicture les fonctions dump_pic et fail. fail est appelée s'il y a eu un problème. <source lang="javascript"> function show_pic() {
navigator.camera.getPicture(dump_pic, fail, { quality : 50 });
} </source>
dump_pic
dump_pic s'occupe de la photo en cas de succès. Elle reçoit en argument les données de la photo. <source lang="javascript"> function dump_pic(data) {
//... document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
} </source>
Pour savoir exactement comment utiliser ces fonctions, on peut aussi consulter l'excellente documentation de phonegap http://docs.phonegap.com/en/1.2.0/phonegap_camera_camera.md.html#Camera
Pour chaque fonctionnalité, la documentation indique aussi sur quels plateformes elle est disponible.
toggleAccel
toggleAccel est la plus compliquée des fonctions de l'exemple
<source lang="javascript"> var accelerationWatch = null;
function updateAcceleration(a) {
document.getElementById('x').innerHTML = roundNumber(a.x); document.getElementById('y').innerHTML = roundNumber(a.y); document.getElementById('z').innerHTML = roundNumber(a.z);
}
var toggleAccel = function() {
if (accelerationWatch !== null) { navigator.accelerometer.clearWatch(accelerationWatch); updateAcceleration({ x : "", y : "", z : "" }); accelerationWatch = null; } else { var options = {}; options.frequency = 1000; accelerationWatch = navigator.accelerometer.watchAcceleration( updateAcceleration, function(ex) { alert("accel fail (" + ex.name + ": " + ex.message + ")"); }, options); }
}; </source>
Ici c'est plus simple de regarder d'abord la documentation. http://docs.phonegap.com/en/1.2.0/phonegap_accelerometer_accelerometer.md.html#Accelerometer Phonegap fournit trois méthodes pour l'accéléromètre, et ce code n'en utilise que deux: watchAcceleration et clearWatch.
- watchAcceleration fait en sorte qu' à intervalle régulier updateAcceleration est appelée avec les données de l'accéléromètre
- L'appel à watchAcceleration retourne une variable d'identification appelée dans l'exemple accelerationWatch . Pour interrompre les mesures d'accélération, on peut appeler clearWatch(accelerationWatch)
- On voit que la fonction toggleAccel déclenche la mesure de l'accélération la première fois qu'elle est appelée. A l'appel suivant elle interrompt la mesure, et à l'appel d'après elle le remet en marche etc...
exercices
- 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.
- 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.
autres fonctionnalités de phonegap
Comme on peut voir dans la documentation, phonegap donne l'accès à d'autres fonctionnalités du téléphone:
- Capture permet d'enregistrer de l'audio, des vidéos et des photos
- Connection permet de savoir si l'appareil est connecté à internet
- Contacts donne accès au carnet d'adresses
- Events permet de réagir à des évènements propres au téléphone. Nous avons déjà vu
- deviceready est lancé quand phonegap est initialisé.
- pause/resume sont déclenchés quand l'application est mise en arrière/avant-plan.
- online/offline signalent la connexion/deconnexion à internet
- batterycritical, batterylow, batterystatus réagissent à des changement du niveau de batterie.
- backbutton, menubutton, searchbutton etc... signalent qu'un bouton a été pressé sur le téléphone, et ne sont disponibles que sur les téléphones qui ont ces boutons
- File permet d'écrire et de lire des fichiers sur le téléphone.
- Geolocation donne la latitude et longitude du téléphone. (Cette information est aussi disponibles au pages web).
- Media permet d'enregistrer et de lire des fichiers audio.
- Storage donne l'accès à une base de donnée relationnelle avec laquelle on peut communiquer avec le langage SQL.