Escolar Documentos
Profissional Documentos
Cultura Documentos
Programmation des
systmes mobiles &
sans fil
CM/TD/TP
valuation
[70%]
[30%]
Ressources
Olivier Le Goaer
pdagogiques
M2 TI Anne 2012-2013
Prrequis du module
Langages
Formats
de dveloppement
d'change
XML, JSON
Outils
de dveloppement
IDE Eclipse
phpMyAdmin
Base
Plan du module
Avant-propos
Dvelopper
Dvelopper
de donnes
une WebApp
une MobileApp
SQL
Un march en explosion
Avant-propos
Vente
Vente
d'applications associes
De nouvelles opportunits
Demande
SmartPhone
crans
QVGA, WVGA...
Mono/multi-touch
Capteurs
Une
GPS, boussoles,
acclromtres...
Connectivit
Tlphonie mobile
GSM,
GPRS,
EDGE,
UMTS (3G)
2e
2,5
3e
Rseaux locaux
sans fil (WLAN)
Rseaux mtropolitains
sans fil (WMAN)
gnration
Zone de couverture
Rseaux personnels
sans fil (WPAN)
gnration
Rseaux tendus
sans fil (WWAN)
OS mobile : dveloppements
Plateforme
Programmation
IDE conseill
Windows Phone
VB.Net, C#
iOS
Objective-C
X-CODE
Blackberry OS
Java
MDS Studio
Java ME
Java
Android
Eclipse + ADT
Palm WebOS
JavaScript, C/C++
Symbian OS
C++
Performance
Brew MP
C++
Bada
C++
badaIDE
MeeGo
Qt C++
QtCreator
Firefox OS (B2G)
HTML5/CSS3/JavaScript
Xemacs ? ;-)
Modles de dveloppement
MobileApp
versus WebApp
Application mobile (native)
Application web
Portabilit
Navigateur Web
Dveloppement
/cot
Mises jour
Disponibilit
Fonctionnalits
HybridApp
Arbre de dcision
: le modle hybride
Ekito.fr
Le dfi du cross-plateforme
Un
Quelle
Solutions cross-platform *
Nom
Programmation
Technique
Commentaires
Titanium Mobile
JavaScript
Interprtation
Composant pr-install
PhoneGap
HML,CSS,JavaScript
Interprtation
NeoMAD
Java
Transcompilation
API android-like
Codename One
Java
Transcompilation
API gnrique
MoSync
HTML5,JavaScript,
C/C++
Transcompilation
Canappi
DSL
Transcompilation
Applause
DSL
Transcompilation
IBM Worklight
HTML5, CSS3,
JavaScript
Interprtation
...
...
...
...
C++, Java...
* Diapositive exprimentale Merci de votre comprhension
Dvelopper une
WebApp [avec
jQuery Mobile]
Le
Les
WebApp mobile-friendly
Customisation
Deux
1) Handheld stylesheets
Frameworks actuels
Sencha
Sencha
Touch
Touch
iUI
iUI
jQuery
jQuery
Mobile
Mobile
Voir
''Media Query''
du W3C
jqTouch
jqTouch
2) Mobile-optimized site
Dojo
Dojo
mobile
mobile
...
...
Principes de base
Vous
Puis,
Au
tape 1 : importation
Des
Importation
Versions
compactes
<link
<link rel="stylesheet"
rel="stylesheet" href="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.css"
href="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.css" />
/>
<script
<script type="text/javascript"
type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script
<script type="text/javascript"
type="text/javascript" src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
tape 2 : structure
Exploitez
<!DOCTYPE
<!DOCTYPE html>
html>
<html>
<html>
<head>
<head>
<title>Page
<title>Page Title</title>
Title</title>
<link
<link rel="stylesheet"
rel="stylesheet" href="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.css"
href="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.css" />
/>
<script
<script type="text/javascript"
type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script
<script type="text/javascript"
type="text/javascript" src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
</head>
</head>
<body>
<body>
<div
<divdata-role="page"
data-role="page" id=''foo''>
id=''foo''>
<div
<div data-role="header">
data-role="header">
<h1>Page
<h1>Page Title</h1>
Title</h1>
</div><!-</div><!-- /header
/header -->
-->
<div
<div data-role="content">
data-role="content">
<p>Page
<p>Page content
content goes
goes here.</p>
here.</p>
</div><!-</div><!-- /content
/content -->
-->
<div
<div data-role="footer">
data-role="footer">
<h4>Page
<h4>Page Footer</h4>
Footer</h4>
</div><!-</div><!-- /footer
/footer -->
-->
</div><!-/page
</div><!-- /page -->
-->
</body>
</body>
</html>
</html>
Multipages
1 document = 1 page
Lien
1 document = n pages
HTML
HTML
HTML
HTML
Modle de navigation
Permet le
prfetching
des pages
Lien
Page
Page
Page
Page
lien interdocument
Page
Page
lien intradocument
interdocument
HTML
HTML
Page
Page
intradocument
Page
Page
Quelques composants
Barre
d'outils
Formatage
Formulaires
classique
Pour
Listes
Balise
Puis,
Boutons
Formulaires
Dialogues
Catgories d'vnements
Une
Lis
au dfilement de l'cran
scrollstart, scrollstop
Lis
orientationchange
Lis
au pointage/touch
Lis
<div
<div data-role="page"
data-role="page" id="foo">
id="foo">
<div
<div data-role="header"
data-role="header" data-position="inline">
data-position="inline">
<h1>Attention</h1>
<h1>Attention</h1>
</div>
</div>
<div
<div data-role="content">
data-role="content">
<h1>Connectivit
<h1>Connectivit limite</h1>
limite</h1>
<p>Vrifiez
<p>Vrifiez vos
vos branchements...</p>
branchements...</p>
<a
<a href="#"
href="#" data-role="button"
data-role="button" data-rel="back">Ok</a>
data-rel="back">Ok</a>
</div>
</div>
</div>
</div>
Tout
Lis
pagebeforecreate, pagecreate
Pour fonctionner,
doivent tre
positionnes
dans le
document matre !
$('elem').live('eventName', callback);
Exemples
en vrac :
Et la "touche finale"
Immiter
Solution
//s'applique
//s'applique tout
tout le
le document
document (non
(non test)
test)
$(document).live('tap',function(event,
$(document).live('tap',function(event, ui){
ui){
alert('Tapotage');
alert('Tapotage');
});
});
//S'applique
//S'applique toutes
toutes les
les pages
pages
$('div').live('pageshow',function(event,
$('div').live('pageshow',function(event, ui){
ui){
alert('Affichage
alert('Affichage de
de la
la page
page active');
active');
});
});
//Ne
//Ne s'applique
s'applique qu'
qu' une
une page
page donne
donne
$('#aboutPage').live('pagecreate',function(event){
$('#aboutPage').live('pagecreate',function(event){
alert('Cette
alert('Cette page
page vient
vient d'tre
d'tre amliore
amliore par
par Jquery');
Jquery');
});
});
Tester
Framework
Qunit : http://docs.jquery.com/Qunit
Dmo : Bankster
Bankster
Fonctionnalits
de l'application Bankster
Partie publique
Partie prive
Bref historique
Dvelopper une
MobileApp [sous
Android]
2003
2007
Naissance
Naissance de
de la
la startup
startup
Android
Android inc.
inc.
Annonce
Annonce d'Android
d'Android +SDK
+SDK
Open
Open Handset
Handset Alliance
Alliance
2005
2008
Rachat
Rachat de
de la
la startup
startup
par
par Google
Google inc.
inc.
Premier
Premier mobile
mobile sous
sous
Android
Android :: le
le T-Mobile
T-Mobile G1
G1
Fabricants de matriels
Oprateurs mobile
Dveloppeurs d'applications
...
http://goo.gl/LejV9
Matriels Android
de + de 50 entreprises
Voir annonce
par Sergey Brin
sur YouTube :
APN
APN
Tablette
Tablette
Embarqu
Embarqu
Smartphone
Smartphone
Objectif
Netbook
Netbook
Tlvision
Tlvision
Systme
Systme Linux
Linux
++
Java
Java
Versions d'Android
Systme
Systme fonctionnel,
fonctionnel,
intuitif,
intuitif, volutif
volutif
Projet
Projet Open
Open Source
Source
C++
C++ // Java
Java
Applications
Applications dveloppes
dveloppes
en
en syntaxe
syntaxe Java
Java
SDK
SDK complet
complet fourni
fourni
CodeName
Platform
API Level
Cupcake
Android 1.5
Donut
Android 1.6
Eclair
Android 2.1
Froyo
Android 2.2
Gingerbread
Android 2.3
Honeycomb
Android 3.0
11
Android 4.0
14
Jelly Bean
Android 4.1
16
Android en images...
Architecture logicielle
Processus
Processus actif
actif
La
Processus
Processus visible
visible
La
limination de processus
sans avertissement !
Concepts
Processus
Processus vide
vide
Outils du dveloppeur
de la POO Java
Plugin
Idiomes
gre ses
ressources de
manire agressive
Processus
Processus d'arrire-plan
d'arrire-plan
Android
Processus
Processus de
de service
service
en
en cours
cours d'excution
d'excution
Priorit
Bibliothques
Android
(API)
Apache
Harmony
API
SDK
mulateurs
Google : com.google.android.maps.*...
Exemples (dmos)
...
Design
patterns
mulateur : aperu
Bouton
'HOME'
Numro du
terminal
Vues
Bouton
'MENU'
Bouton
'BACK'
cran
''Tactile''
Thme (skin)
par dfaut
mulateur : limitations
Lent
Arborescence systme
Alternative :
AndroVM
sur
VirtualBox
au dmarrage et l'usage
Applications
utilisateur (.apk)
(AngryBirds, Mto...)
Fonctionnalits
Donnes des
applications
(database SQLite,
SharedPreferences...)
non-disponibles
Vibreur
Capteurs en gnral
Connexions USB
Applications
systme (.apk)
(Horloge, Browser,
Calculatrice...)
Commandes
systme
(mkdir, chmod, ls...)
Arborescence projet
Dossier du
projet
Le plugin ADT
gre et facilite
cette structuration
prvoit de facto
l'externalisation des
ressources
Vos fichiers
sources (*.java)
Fichier source automatiquement gnr
( partir du contenu du rpertoire res)
API Android
(ici version 2.2)
Ressources non-organises
(zip, PDF, HTML...)
Crer
des ressources
Ressources organises
(icnes, layout,
textes...)
Fichier Manifest
Compilation et dploiement
Sources Java
Bytecode Java
.java
.java
Entirement
automatis
avec le
plugin ADT
sous Eclipse !!
Bytecode Dalvik
(optimis)
.dex
.dex
.class
.class
.apk
.apk
Ressources + Manifest
Application
empaquete
/data/app
.png
.png
.xml
.xml
Environnement contraint
Pour
Construction d'une
application Android
Application
Application
d'arrire
d'arrire plan
plan
Application
Application
de
de premier
premier plan
plan
(ex:
(ex: rpondeur
rpondeur
automatique
automatique aux
aux SMS)
SMS)
(ex:
(ex: jeu
jeu de
de Poker)
Poker)
Widget
Widget
(ex:
(ex: mto
mto du
du jour)
jour)
Intermittente
Intermittente
(ex:
(ex: lecteur
lecteur de
de mdia)
mdia)
Le manifeste
Chaque
Activities
Services
Intents
crans
crans de
de prsentation
prsentation
Tches
Tches d'arrire-plan
d'arrire-plan
Activations
Activations && messages
messages
inter/intra-applications
inter/intra-applications
Manifeste
Mtadonnes,
Mtadonnes,
composants,
composants, prrequis
prrequis
...
Content Providers
Broadcast Receivers
Sources
Sources de
de donnes
donnes
partageables
partageables
Ractions
des
Ractions
des
Ecrans
Ecrans de
de prsentation
prsentation
annonces/vnements
annonces/vnements
AndroidManifest.xml
Notion de contexte
Pensez bien
dclarer tous
les composants
applicatifs de
votre application !
<uses-permission />
<uses-sdk />
<supports-screens />
Nud de l'application
<application>
Possde
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
</activity>
Le
<service>
<intent-filter> . . . </intent-filter>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
</receiver>
<provider>
<grant-uri-permission />
</provider>
Accs
au contexte
</application>
</manifest>
Activit
Une
mthodes de callback
void onCreate(...)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
Une
Exemple
: application de tlphonie
1) Numroteur
2) Annuaire des contacts
tend
android.app.Activity
Diagramme de cas d'utilisation (UML)
Pour
Une
Lancer
une activit
Mthode startActivity(...)
Lancer
Mthode startActivityForResult(...)
activits sont
empiles/dpiles
Multitches
Plusieurs
Une
pression sur le
bouton 'HOME' ne
dpile pas l'activit.
Reprend l'activit
situe au
sommet de
la pile
Service
Sert
Deux
Un
types de services :
mthodes de callback
onCreate()
onStart()
onStartCommand()
onDestroy()
onBind()
onUnbind()
SDK<2.0
android.app.Service
S'excute
dans le
processus courant
Mode
Unbounded
Un composant dmarre et
arrte un traitement en
tche de fond comme il le
souhaite
Mode
Oprations
startService(...)
stopService(...)
Bounded
Oprations
Un mme service
peut supporter
les 2 modes
simultanment
bindService(...)
unbindService(...)
Intents : principes
Les
onActivityResult(Intent)
onActivityResult(Intent)
Principe
Filtre
d'intentions
de A
startActivity(Intent)
startActivityForResult(Intent)
finishActivity(int)
Main Activity
Intent
Intent getIntent()
getIntent()
setResult(Intent)
sendBroadcast(Intent)
sendOrderedBroadcast(Intent)
sendStickyBroadcast(Intent)
startService(Intent)
stopService(Intent)
bindService(Intent)
Filtre
d'intentions
de S
Activity
Filtre
d'intentions
de B
Service
BroadcastReceiver
onStartCommand(Intent)
onStartCommand(Intent)
IBinder
IBinderonBind(Intent)
onBind(Intent)
onReceive(Intent)
onReceive(Intent)
Intent
Intent
Bus
Modes
1. Direct
de dsignation
1. Explicite
Instance de
android.content.Intent
Le composant cible est activ
par le composant source
Instance de
android.content.PendingIntent
2. Implicite
2. Par procuration
Stockage
Rcupration
package fr.univpau.bankster;
URI
Signification
ACTION_EDIT
content://contacts/people/125
import android.app.Activity;
import android.content.Intent;
ACTION_VIEW
geo:49.5000,123.5000
ACTION_CALL
tel:0156601234
Appeller le numro
ACTION_VIEW
google.streetview: cbll=49.5000,123.5000
...
...
...
void goToNextScreen() {
Intent i = new Intent();
/* Intent de type direct */
i.putExtra("happy", false); /* Donne additionnelle */
if(je_connais_la_cible) {
/* Dsignation explicite (implmentation) */
i.setClass(Home.this, NextActivity.class);
} else {
/* Dsignation implicite(action + data) */
i.setAction(Intent.ACTION_DIAL);
i.setData(Uri.parse("tel:01-56-60-12-34"));
}
this.startActivity(i); /* Pouss sur le bus */
Actions
natives android
Format
d'une URI
scheme://host:port/path
}
}
Filtres d'intention
Chaque
du mode de dsignation
Permettra
A2
A3
ACTION_VIEW
<activity android:name="A1">
<intent-filter>
<action name="...VIEW"/>
<data scheme="http"/>
</intent-filter>
</activity>
tel:112
<activity android:name="A2">
<activity
android:name="A2">
<intent-filter>
<intent-filter>
<action name="...VIEW"/>
<action
name="...VIEW"/>
<data
scheme="tel"/>
<data scheme="tel"/>
</intent-filter>
</intent-filter>
</activity>
</activity>
<activity android:name="A3">
</activity>
L'absence
Bus
Actions personnalises
Dfinir
package fr.univpau.bankster;
Applications et Tches
Ainsi,
Dclarer
<manifest>
<application>
<service android:name="AccountManager">
<intent-filter>
<action android:name="fr.univpau.bankster.DEBITER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
</application>
</manifest>
Une
Une
Broadcast receiver
Ragit
@Override
public void onReceive(Context arg0, Intent arg1) {
//si besoin, accder aux extras de l'intent arg1
Intent i = new Intent(arg0, AccountCleaner.class);
arg0.startService(i);
}
Ne
Un
android.content.BroadcastReceiver
Un
<manifest>
<application>
<receiver class="fr.univpau.bankster.Sleep">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver>
</application>
</manifest>
Content Provider
Rsolution de contenu
Un
Un
Diffrentes
Fichier XML/JSON
Etc.
La
android.content.ContentProvider
Expose
System-defined : content://contacts/people/125
User-defined : content://fr.univpau.bankster/account/28854165
ContentResolver cr = getContentResolver();
content://call_log/calls
SpyApp
techniques de persistance
Settings
++ delete()
delete()
++ insert()
insert()
++ notifyChange()
notifyChange()
++ query()
query()
++ update()
update()
Content
Resolver
CallLog
MediaStore.Images
MediaStore.Audios
Deux
cas de figure :
1) Un seul enregistrement
URI
: content://fr.univpau.bankster/account/[id]
2) Plusieurs enregistrements
URI
: content://fr.univpau.bankster/account/
Interface graphique
utilisateur (GUI)
Principe de R.java
R.java
Chaque
Chemin
user-defined : fr.univpau.foo.R.color.rose_bonbon
system-defined : android.R.color.darker_gray
Objet
obj.setColor(R.color.rose_bonbon);
obj.setColor(android.R.color.darker_gray);
ressources
<EditText android:textColor="@color/rose_bonbon"/>
<EditText android:textColor="@android:color/darker_gray"/>
du
design pattern
Composite
0..*
+onDraw(Canvas canvas)
ViewGroup
ViewSimple
+addView(View child)
ViewGroup
(layout)
ViewSimple
LinearLayout
Button
TableLayout
EditText
RelativeLayout
TextView
FrameLayout
Spinner
ScrollView
CheckBox
(widget)
Mais peut se
faire de faon
100%
programmatique
de personnalisation
Rendu
OpenGL, Renderscript
Layouts : aperu
View
Principe
dclarative la XML
Fonctionnalit
attribute="@[packageName]:resourcetype/resourseIdent"
Java riche
Programmation
Rfrencer
Le fichier R permet
de tirer parti d'une
compltion
automatique
de code dans
l'diteur Eclipse
UI : User Interface
Une API
Le fichier R permet
de tirer parti d'une
vrification
syntaxique par
le compilateur
Proprits de placement
Orientation
Proprits de placement
Poids
Taille
Espacement
(intra)
Gravit
Espacement
(inter)
android:layout_margin? = ??px
Widgets : aperu
Activits ddies
Afin
Fragments
Nouveaut
Principe
android.app.Fragment
Les
Dialogues
Confirmation
Progession
de base
Un
Dialogues et Toasts
Toasts
Message compact et
rapide l'intention de
l'utilisateur
Menus
Menu
principal
Barres
Menu
contextuel
Barre
d'action rapide
Thmes et styles
Un
Un
MenuInflater.inflate(R.menu.control, my_menu);
onClick(View), onLongClick(View)
Bizarrerie :
un seul
listener
par widget :-/
Hritent de android.widget.BaseAdapter
onKeyUp(KeyEvent), onKeyDown(KeyEvent)
onTouchEvent(MotionEvent)
d'adaptateurs
OnTouchListener
Classes
OnKeyListener
Gestion
OnClickListener, OnLongClickListener
Les adaptateurs
Les
Gestion
Principe
Rcuprer
Il
Rcuprer
Chaque
d'action
Barre
Model-View-Presenter (MVP)
PRESENTER
PRESENTER
Notify data changed
BaseAdapter
BaseAdapter
(CursorAdapter,
(CursorAdapter,
ArrayAdapter,
ArrayAdapter, ...)
...)
android.R.layout.simple_spinner_item
adapted-by
query data
refresh
android.R.layout.simple_list_item_1
MODEL
MODEL
Cursor
Cursor ou
ou
Collection
Collection
(ArrayList,
(ArrayList, [[ ]...)
]...)
VIEW
VIEW
AdapterView
AdapterView
(Spinner,
(Spinner, ListView...)
ListView...)
Spcifie un texte align gauche, ainsi qu'un texte blanc sur fond
transparent.
...
Vous
fr.univpau.bankster.R.layout.mon_bel_item
Notifications
Diffrentes
formes de notifications :
Application Multicran
Prvoir
LED
/res/drawable-hdip/icon.png
Son
/res/drawable-mdip/icon.png
Vibreur
/res/drawable-ldip/icon.png
Prvoir
Utilisation
NotificationManager nm = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
/res/layout-port/main.xml
/res/layout-land/main.xml
Images redimensionnables
Utiliser
Application Multi-langues
Prvoir
/res/values-fr/strings.xml
/res/values-en/strings.xml
/res/values-it/strings.xml
Depuis le code,
on manipule une
seule ressource,
sans se soucier
de la rsolution
(R.drawable.icon)
On manipule une
seule ressource,
sans se soucier
de la langue
(R.strings.hello)
Le
S'applique
/res/drawable-fr/splashscreen.png
/res/drawable-en/splashscreen.png
Shared Preferences
Persistance et
threading
Mcanisme
simple et lger
Sauvegarder
Retrouvez
de lecture/criture de fichiers
Sauvegarde
et chargement
Srialisation d'objets
Chaque
Bas
Cas
Srialisation
oos.writeObject(myObject);
Dsrialisation
XML et JSON
XML
des prfrences
String t = pref.getString("teacher","unknown");
des prfrences
Android
Lger et puissant
JSON
Note
SAX plus
performant
que DOM !
Types
de donnes
Implmentation
Bonnes pratiques
Crer
Interrogation de la base
un helper
Approche
tendre android.database.sqlite.SQLiteOpenHelper
L'instance
SQLiteDatabase db;
Approche
L'ensemble
On
Reprsentation
n paires nom-de-champ/valeur-de-champ
de tuples
Supression
Fermeture
d'un curseur :
manuellement ou
en mode ''manag''
Mise
Ncessit
de tuples
jour de tuples
Thread principal
Tous
d'un tuple
Ajout
par composante
Rsultats
Tche asynchrone
Classe
Fournit
Puis
Excution
de la tche
Thread enfant
Mme
Pour
Exemples
Communications rseaux
Manipulations SQLite
frquents :
Pensez
Les capteurs
Exploiter les
dispositifs matriel
Un
Luminomtre
Magntomtre
...
Constantes
d'abonnement un capteur
TYPE_AMBIENT_TEMPERATURE, TYPE_GRAVITY,
TYPE_GYROSCOPE, TYPE_LIGHT...
Surtout,
@Override
public void onCreate() {
// Mise en place de l'coute de l'acclromtre
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
a = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(new SensorEventListener() {...}, a);
}
@Override
protected void onDestroy() {
super.onDestroy();
sm.unregisterListener(...);
}
}
Interface
android.hardware.SensorEventListener
commune tous les capteurs
Evnement de capteur
L'vnement
est
modlis par :
la prcision de
l'acquisition
son horodatage
Une
seule valeur
Luminomtre, pression,
proximit...
Trois
valeurs (X-Y-Z)
Acclromtre, gravit,
gyroscope...
Chaque
Multi-touch
vnements gestuels
Supporte
plusieurs
pointeurs simultans
Une
Doigt, stylet...
event.getPointerCount()
Trois
b) Drag
c) Pinch-Zoom
Golocalisation
Exploiter
Instance de android.location.LocationManager
vnements de position
Interface
android.location.LocationListener pour
couter les changements de position
Instance de android.location.LocationProvider
Require
le gestionnaire de position
gestes de base
a) Tap
event.getActionMasked()
Diffrencie
Consommation d'nergie
Prcision
...
Il est possible
de choisir le
''meilleur'' fournisseur
par rapport
des critres
Chaque
Golocalisation : code
source
Cartographie
package fr.univpau.bankster;
La
import android.app.Activity;
import android.location.*;
public class FindNearestAgency extends Activity {
@Override
public void onCreate() {
// Choix du fournisseur de position GPS
lm = (LocationManager)getSystemService(LOCATION_SERVICE);
String gps_prov = LocationManager.GPS_PROVIDER;
// Mise en place de l'coute des changements de position
loc_list = new LocationListener() {}
// Laps (5sec) et distance (6m) minimums entre 2 updates
lm.requestLocationUpdates(gps_prov, 5000, 6, list);
}
@Override
public void onDestroy() {
lm.removeUpdates(loc_list);
}
Choisir
// Ne pas oublier !
Voi aussi
l'activit ddie
MapActivity
Instance de com.google.android.maps.MapView
MapController
Instance de com.google.android.maps.MapController
Projection
Interface com.google.android.maps.Projection
Overlay
Instance de com.google.android.maps.Overlay
des coordonnes
com.google.android.maps.GeoPoint android.graphics.Point
Bluetooth
Socket
BluetoothDevice #2
BluetoothAdapter
BluetoothDevice #3
Divers
Services systme
Alarmes et Timers
Il
Les
Exemples
Context.LOCATION_SERVICE
Context.LAYOUT_INFLATER_SERVICE
Context.STORAGE_SERVICE
Prise
de services (constantes)
AlarmManager am =
(AlarmManager)getSystemService(Context.ALARM_SERVICE)
Les
Context.TELEPHONY_SERVICE
Context.WIFI_SERVICE
Linkify, TextWatcher
Transformer
Comment
Contrler
Principe
Mapping objet-relationnel
Le
du singleton
Il
Il
Orman
NeoDatis
DataFramework
Androrm
SOAP
REST
Requte
++
DB4O
Astuce :
masquez le tout
avec un
ContentProvider
Rponse
Serveur
Serveur
HTTP
HTTP
ORMLite
...
JSP/Servlets,...
PHP,JSP/Servlets,
PHP,
...
XML/SOAP,
JSON...
192.56.7.45
BDD
BDD
(Oracle,
(Oracle,
MySQL,
MySQL,
PosgreSQL...)
PosgreSQL...)
de l'UI de
votre MobileApp
Tests et dploiement
Outils
de mockups
http://yeblon.com/androidmockup/
http://mokk.me
...
junit.framework.Assert
Le
android.test.InstrumentationTestRunner
Mise
Le
Extension
Test de l'UI
...
Exporter et signer
Toute
Trois
1
tapes :
Procdure
entirement
automatise
avec ADT
Exemple : http://www.univ-pau.fr/~olegoaer/bankster.apk
YAAM (http://yaam.mobi/)
Bazaar (http://www.bazaarandroid.com/)
AndroLib (http://fr.androlib.com/)
Analyse d'audience
Google Analytics
Principes
de fonctionnement