Académique Documents
Professionnel Documents
Culture Documents
Programmation Des Systèmes Mobiles & Sans Fil
Programmation Des Systèmes Mobiles & Sans Fil
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
GSM,
GPRS,
EDGE,
UMTS (3G)
LTE Adv. (4G)
Zone de couverture
Rseaux personnels
sans fil (WPAN)
Rseaux locaux
sans fil (WLAN)
Rseaux mtropolitains
sans fil (WMAN)
Rseaux tendus
sans fil (WWAN)
OS mobile : dveloppements
Modles de dveloppement
Plateforme
Programmation
IDE conseill
Windows Phone
VB.Net, C#
iOS
Objective-C
X-CODE
Blackberry OS
Java
MDS Studio
Portabilit
Navigateur Web
Java ME
Java
Dveloppement
/cot
Android
Mises jour
Palm WebOS
JavaScript, C/C++
C++
Performance
Disponibilit
Symbian OS
Fonctionnalits
MobileApp
versus WebApp
Application mobile (native)
Application web
Brew MP
C++
Bada
C++
badaIDE
MeeGo
Qt C++
QtCreator
Firefox OS (B2G)
HTML5/CSS3/JavaScript
Xemacs ? ;-)
Ubuntu Mobile
C/C++, JavaScript
Qt Creator
HybridApp
: le modle hybride
Arbre de dcision
Le dfi du cross-plateforme
Un
Quelle
Ekito.fr
C++, Java...
Solutions cross-platform *
Nom
commercial
Programmation
Technique
Titanium Mobile
JavaScript
Interprtation
Apache Cordova
(PhoneGap)
Interprtation
NeoMAD
Java
Transcompilation
API android-like
Codename One
Java
Transcompilation
API gnrique
MoSync
Transcompilation
appMobi
HTML5, JavaScript
Canappi
DSL
Transcompilation
Applause
DSL
Transcompilation
IBM Worklight
Interprtation
Rhodes
Interpretation
...
...
...
Dvelopper une
WebApp [avec
jQuery Mobile]
Commentaires
IDE online
...
* Diapositive exprimentale Merci de votre comprhension
Les
WebApp mobile-friendly
Customisation
Deux
1) Handheld stylesheets
Voir
''Media Query''
du W3C
2) Mobile-optimized site
Frameworks actuels
Sencha
Sencha
Touch
Touch
iUI
iUI
jQuery
jQuery
Mobile
Mobile
jqTouch
jqTouch
Dojo
Dojo
mobile
mobile
...
...
Principes de base
Vous
Puis,
Au
tape 1 : importation
Des
tape 2 : structure
l'attribut data-* dans votre
document, o * est la fonctionnalit dsire
Exploitez
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>
Multipages
1 document = 1 page
1 document = n pages
HTML
HTML
HTML
HTML
Permet le
prfetching
des pages
<div
<div data-role="page"
data-role="page" id=''foo''>
id=''foo''>
<div
<div data-role="header">
data-role="header">
<h1>Page
<h1>PageTitle</h1>
Title</h1>
</div><!-</div><!-- /header
/header -->
-->
Page
Page
Page
Page
lien interdocument
<div
<div data-role="content">
data-role="content">
<p>Page
<p>Page content
content goes
goes here.</p>
here.</p>
</div><!-</div><!-- /content
/content -->
-->
Page
Page
HTML
HTML
<div
<div data-role="footer">
data-role="footer">
<h4>Page
<h4>Page Footer</h4>
Footer</h4>
</div><!-</div><!-- /footer
/footer -->
-->
</div><!-/page
</div><!-- /page -->
-->
lien intradocument
Page
Page
</body>
</body>
</html>
</html>
Modle de navigation
Lien
intradocument
Quelques composants
Barre
interdocument
Boutons
Listes
Formulaires
Formulaires
Balise
classique
Puis,
Une
Pour
Dialogues
d'outils
Formatage
Lien
Page
Page
Tout
Catgories d'vnements
Lis
Pour fonctionner,
doivent tre
positionnes
dans le
document matre !
$('elem').live('eventName', callback);
Exemples
en vrac :
//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');
});
});
au dfilement de l'cran
//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');
});
});
Lis
scrollstart, scrollstop
Lis
orientationchange
Lis
Mthodes
Lis
au pointage/touch
//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');
});
});
pagebeforecreate, pagecreate
Et la "touche finale"
Immiter
$('div')
$('div.foo')
$('div > p')
$('#bar')
Test
Solution
Tester
Framework
Qunit : http://docs.jquery.com/Qunit
Dmo : Bankster
Bankster
Fonctionnalits
de l'application Bankster
Partie publique
Partie prive
Dvelopper une
MobileApp [sous
Android]
Bref historique
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
Fabricants de matriels
http://goo.gl/LejV9
Oprateurs mobile
Dveloppeurs d'applications
...
Objectif
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
de + de 50 entreprises
Voir annonce
par Sergey Brin
sur YouTube :
Matriels Android
APN
APN
Systme
Systme Linux
Linux
++
Java
Java
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
Tablette
Tablette
Embarqu
Embarqu
Smartphone
Smartphone
Netbook
Netbook
Tlvision
Tlvision
Versions d'Android
Android en images...
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
Architecture logicielle
Couches logicielles
APPLICATIONS
APPLICATION FRAMEWORK
ANDROID RUNTIME*
Machine virtuelle
LIBRARIES
Bibliothques C/C++
LINUX KERNEL
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 :
android.app.Service
mthodes de callback
onCreate()
onStart()
onStartCommand()
onDestroy()
onBind()
onUnbind()
S'excute
dans le
processus courant
SDK<2.0
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
Trois
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
Dsignations
1. Direct
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
A1
Permettra
A2
A3
ACTION_VIEW
<activity android:name="A1">
<intent-filter>
<action name="...VIEW"/>
<data scheme="http"/>
</intent-filter>
</activity>
tel:112
L'absence
<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>
Bus
Mcanisme de rsolution
Principe
Dfinir
package fr.univpau.bankster;
Actions personnalises
@Override
public void onCreate(Bundle savedInstanceState) {
startService(new Intent(Home.DEBITER));
}
}
Mcanisme
implment par
com.android.server.IntentResolver
Dclarer
Applications et Tches
Ainsi,
Broadcast receiver
Ragit
Une
Ne
Un
Une
<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>
android.content.BroadcastReceiver
Un
Content Provider
Un
Un
android.content.ContentProvider
Expose
<manifest>
<application>
<receiver class="fr.univpau.bankster.Sleep">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver>
</application>
</manifest>
System-defined : content://sms/inbox/125
User-defined : content://fr.univpau.bankster/account/28854165
Rsolution de contenu
Diffrentes
techniques de persistance
Fichier XML/JSON
Etc.
content://call_log/calls
SpyApp
Settings
++ delete()
delete()
++ insert()
insert()
++ notifyChange()
notifyChange()
++ query()
query()
++ update()
update()
La
Content
Resolver
CallLog
MediaStore.Images
MediaStore.Audios
ContentResolver cr = getContentResolver();
Deux
cas de figure :
1) Un seul enregistrement
URI
: content://fr.univpau.bankster/account/[id]
2) Plusieurs enregistrements
URI
: content://fr.univpau.bankster/account/
}
Principe de R.java
Interface graphique
utilisateur (GUI)
Chaque
Chemin
user-defined : fr.univpau.foo.R.color.rose_bonbon
system-defined : android.R.color.darker_gray
Objet
R.java
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int editText1=0x7f050000;
public static final int listView1=0x7f050001;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
Le fichier R permet
de tirer parti d'une
compltion
automatique
de code dans
l'diteur Eclipse
obj.setColor(R.color.rose_bonbon);
obj.setColor(android.R.color.darker_gray);
Rfrencer
ressources
attribute="@[packageName]:resourcetype/resourseIdent"
<EditText android:textColor="@color/rose_bonbon"/>
<EditText android:textColor="@android:color/darker_gray"/>
UI : User Interface
Une API
Java riche
Programmation
Mais peut se
faire de faon
100%
programmatique
de personnalisation
du
design pattern
Composite
ViewGroup
OpenGL, Renderscript
+onDraw(Canvas canvas)
+invalidate()
ViewGroup
ViewSimple
ViewSimple (widget)
LinearLayout
Button
TableLayout
EditText
RelativeLayout
TextView
FrameLayout
Spinner
ScrollView
CheckBox
0..*
+addView(View child)
Rendu
dclarative la XML
Fonctionnalit
Principe
Layouts : aperu
Proprits de placement
Orientation
Taille
Gravit
Proprits de placement
Widgets : aperu
Poids
Espacement
(intra)
Espacement
(inter)
android:layout_margin? = ??px
Sauvegarder/restaurer l'tat
des vues
Lorsqu'une
Lorsqu'une
2. L'activit passe en arrire plan mais est tue par le systme (rquisition !)
Nouveaut
onSaveInstanceState() et onRestoreInstanceState()
onRetainNonConfigurationInstance() et getLastNonConfigurationInstance()
Principe
de base
Fragments
Un
android.app.Fragment
Les
Activits ddies
Dialogues et Toasts
Afin
Dialogues
Confirmation
Progession
Menus
Menu
principal
Menu
contextuel
Un
Chaque
Message compact et
rapide l'intention de
l'utilisateur
Barres
Barre
Thmes et styles
Un
Toasts
Barre
d'action
Rcuprer
Rcuprer
MenuInflater.inflate(R.menu.control, my_menu);
d'action rapide
onClick(View), onLongClick(View)
Hritent de android.widget.BaseAdapter
OnTouchListener
onTouchEvent(MotionEvent)
Model-View-Presenter (MVP)
Register/Unregister
Observers
PRESENTER
PRESENTER
Notify data changed
BaseAdapter
BaseAdapter
(CursorAdapter,
(CursorAdapter,
ArrayAdapter,
ArrayAdapter, ...)
...)
android.R.layout.simple_spinner_item
adapted-by
query data
refresh
Cursor
Cursor ou
ou
Collection
Collection
(ArrayList,
(ArrayList, [[ ]...)
]...)
VIEW
VIEW
AdapterView
AdapterView
(Spinner,
(Spinner, ListView...)
ListView...)
android.R.layout.simple_list_item_1
MODEL
MODEL
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
d'adaptateurs
onKeyUp(KeyEvent), onKeyDown(KeyEvent)
Gestion
Classes
Bizarrerie :
un seul
listener
par widget :-/
OnKeyListener
OnClickListener, OnLongClickListener
Les
Gestion
Les adaptateurs
Application Multi-crans
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
Depuis le code,
on manipule une
seule ressource,
sans se soucier
de la rsolution
(R.drawable.icon)
Images redimensionnables
Utiliser
Application Multi-langues
Prvoir
/res/values-fr/strings.xml
/res/values-en/strings.xml
/res/values-it/strings.xml
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
des prfrences
String t = pref.getString("teacher","unknown");
des prfrences
Srialisation
oos.writeObject(myObject);
Dsrialisation
XML et JSON
XML
Android
Note
SAX plus
performant
que DOM !
Lger et puissant
Types
JSON
Implmentation
Support du standard SQL-92
Interrogation de la base
un helper
Approche
tendre android.database.sqlite.SQLiteOpenHelper
L'instance
SQLiteDatabase db;
Approche
par composante
L'ensemble
Reprsentation
n paires nom-de-champ/valeur-de-champ
de tuples
Supression
Fermeture
d'un curseur :
manuellement ou
en mode ''manag''
d'un tuple
Ajout
Rsultats
On
Bonnes pratiques
de donnes
Crer
Mise
de tuples
jour de tuples
Deux
exemples rcurrents :
1) Communications rseaux
2) Manipulations SQLite
Et
Ncessit
Puis
Tche asynchrone
Classe
Fournit
Excution
de la tche
Thread enfant
Mme
Pour
Les capteurs
Exploiter les
dispositifs matriel
Un
Luminomtre
Magntomtre
...
Constantes
TYPE_AMBIENT_TEMPERATURE, TYPE_GRAVITY,
TYPE_GYROSCOPE, TYPE_LIGHT...
d'abonnement un capteur
package fr.univpau.bankster;
import android.app.Service;
import android.hardware.*;
public class FallingDown extends Service {
@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);
}
Surtout,
@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
gestes de base
a) Tap
event.getActionMasked()
Diffrencie
Golocalisation
Exploiter
le gestionnaire de position
Interface
android.location.LocationListener pour
couter les changements de position
Instance de android.location.LocationManager
Instance de android.location.LocationProvider
Require
vnements de position
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 !
Voir aussi
l'activit ddie
MapActivity
Instance de com.google.android.maps.MapView
MapController
Instance de com.google.android.maps.MapController
Instance de com.google.android.maps.Overlay
Projection
Overlay
des coordonnes
com.google.android.maps.GeoPoint android.graphics.Point
Interface com.google.android.maps.Projection
Divers
Bluetooth
Socket
BluetoothDevice #2
BluetoothAdapter
BluetoothDevice #3
Services systme
Il
Alarmes et Timers
Les
Exemples
de services (constantes)
Context.LOCATION_SERVICE
Context.LAYOUT_INFLATER_SERVICE
Context.STORAGE_SERVICE
Context.TELEPHONY_SERVICE
Context.WIFI_SERVICE
Prise
AlarmManager am =
(AlarmManager)getSystemService(Context.ALARM_SERVICE)
Les
Linkify, TextWatcher
Transformer
Contrler
Principe
du singleton
Mapping objet-relationnel
Le
Il
Il
ActiveAndroid
Orman
NeoDatis
Androrm
REST
Requte
++
SOAP
DataFramework
Astuce :
masquez le tout
avec un
ContentProvider
Rponse
Serveur
Serveur
HTTP
HTTP
ORMLite
...
JSP/Servlets,...
PHP,JSP/Servlets,
PHP,
BDD
BDD
(Oracle,
(Oracle,
MySQL,
MySQL,
PosgreSQL...)
PosgreSQL...)
...
XML/SOAP,
JSON...
192.56.7.45
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
tapes :
Procdure
entirement
automatise
avec ADT
Analyse d'audience
Google Analytics
Principes
de fonctionnement
Exemple : http://www.univ-pau.fr/~olegoaer/bankster.apk
YAAM (http://yaam.mobi/)
Bazaar (http://www.bazaarandroid.com/)
AndroLib (http://fr.androlib.com/)