Académique Documents
Professionnel Documents
Culture Documents
Tarak Chaari
Tarak CHAARI
Android
Tarak CHAARI 2
Présentation générale de l’intervention
Objectifs
Présentation des enjeux des architectures mobiles
Avoir une idée sur l’architecture Android
Avoir une idée sur la programmation Mobile sous Android
Android
Tarak CHAARI 3
Introduction
Android
Tarak CHAARI 4
Constat
Explosion du marché des terminaux mobiles
Faible coût Internet
Marché grande consommation
Intranet
Evolution technologique exponentielle
AVANT :
Affichage limité
100x60 pour les écrans N/B
640x240 pour les terminaux avec écrans couleurs
Faible mémoire
Ne dépasse pas 1Mo de mémoire morte et vive réunies
MAINTENANT :
Hautes résolutions, GPS, WIFI, extension mémoire…
Android
Tarak CHAARI 6
Évolution de l’utilisation d’internet
Android
Tarak CHAARI 7
Enjeux
Téléphone mobile
PALM
PDA
Tablettes
Android
Tarak CHAARI 8
Origines
Google? Pas tout à fait, c’est une PME américaine qui
s’appelle Android créé en 2003 et rachetée par Google en
2005
Android
Tarak CHAARI 10
L’influence de l’Open Handset Alliance (OHA) (2/2)
Android
Tarak CHAARI 11
Philosophie et avantages d’android (1/2)
Open Source
Flexibilité
s’adapte à différentes architectures matérielles (avec clavier,
tactile, téléphones, tablettes et même micro-ondes)
distribution intelligente
Exemple : application nécessitant bluetooth ne sera visible qu’à
partir des terminaux avec bluetooth)
Ingénieux
réutiliser le maximum de l’existant et combiner les composants :
Exemple : utiliser le répertoire téléphonique
Combiner les composants (Appareil photo + GPS par exemple)
Android
Tarak CHAARI 13
Contraintes du développement mobile (1/2)
Nature de l’écran
avec stylet petits composants
sensitif composants plus gros
Android
Tarak CHAARI 17
Architecture d’Android
Android
Tarak CHAARI 18
Architecture à couches
Android
Tarak CHAARI 19
Dalvik VM, au lieu de JVM
Machines à registres
Android
Le noyau android
Noyau standard Linux assurant :
Gestion de mémoire et de processus
Gestion de la pile réseau
Gestion des pilotes des capteurs
Gestion des permissions d’accès
Gestion de l’énergie
Problème
Limite de la capacité des batteries et sa dégradation continue
avec leur utilisation
Android
Tarak CHAARI
Gestion de l’énergie avec le noyau android (2/2)
Android
Tarak CHAARI
Environnement d’exécution Android (1/3)
Core Libraries
Fournit les fonctionnalités offertes par les librairies de
bases du langage Java
APIs
Structures de données
Utilitiés
Gestiond’accès aux fichiers
Accès au réseau
Composants graphiques
Etc
Android
Tarak CHAARI
Environnement d’exécution Android (2/3)
Android
Tarak CHAARI
Environnement d’exécution Android (3/3)
Android
Tarak CHAARI
Librairies (1/2)
Développées en C/C++
Android
Tarak CHAARI
Framework des applications
Android
Tarak CHAARI
Couche « Applications »
Android
Tarak CHAARI
Etapes de développement (JVM)
Android
Tarak CHAARI 31
Etapes de développement (Dalvink VM)
Android
Tarak CHAARI 32
Outils Android
Android
Tarak CHAARI 33
Prérequis (1/2)
JDK http://www.oracle.com/technetwork/java/javase/downloads
Android SDK http://developer.android.com/sdk/index.html
Android
Tarak CHAARI 34
Prérequis (2/2)
Android
Tarak CHAARI 35
Contenu de “Android SDK”
SDK ROOT
Sample Code
Development
System Images and Documentation
Tools
Applications
Répertoire Description
Android
Tarak CHAARI
Contenu de “Android SDK” (Cont)
Development Tools
Hierarchy Viewer
Un outil permettant le déboguage et l’optimisation des interfaces
utilisateurs
Cet outil offre une représentation visuelle des dispositions
hiérarchique des composants graphiques
Android
Tarak CHAARI
Contenu de “Android SDK” (fin)
Development Tools (Cont)
Android Interface Description Language (aidl)
Un langage qui permet de définir les interfaces déchanges inter-
processus
Ce sont des interfaces Java
sqlite3
Un outil permettant d’accéder aux bases de données SQLite des
applications Android
Traceview
Analyse statistiques sur les applications (mémoire utilisée, charge
processeur…)
dx
L’outil qui permet de transformer les .class en bytcode Dalvik
Android
Tarak CHAARI
IDE de développement
Pour ne pas déstabiliser les développeurs: un éditeur habituel
Android
Tarak CHAARI 40
IDE de développement (cont)
Eclipse
Un IDE open source project développé par une grande
communauté
Android
Tarak CHAARI
IDE de développement (cont)
Eclipse Platform
Exemples de plug-ins:
Plug-in Function
JDT provides the capability to create, edit, navigate, build,
and debug projects that use Java as a programming
language
Android
Tarak CHAARI
Le plugin ADT - Android Development Tools
Android
Tarak CHAARI
Installation - ADT
Android
Tarak CHAARI
Un émulateur (1/3)
Pour essayer les applications développées (pas obligatoire)
Android
Tarak CHAARI 46
Un émulateur (2/3)
Android
Tarak CHAARI 47
Un émulateur (3/3)
Pour le test
sur le
terminal, ne
pas oublier
d’installer les
pilotes USB !
Android
Tarak CHAARI 48
Composants principaux d’applications
Android
Android
Tarak CHAARI 49
Introduction au développement Android
Mots-clés
Applications,
Communication, évènements, intentions,
Services en tâche de fond,
Persistance.
Android
Tarak CHAARI
Contenu d’une application Andoid
.apk
• res/layout: declaration layout files
Data Files • res/drawable: intended for drawing
Java • res/anim: bitmaps, animations for transitions
Code Resources • res/values: externalized values
Files strings, colors, styles, etc
• res/xml: general XML files used at runtime
• res/raw: binary files (e.g. sound)
Android
Tarak CHAARI
Composants principaux d’applications
Les applications Androids n’ont pas un point d’entrée
unique (comme la méthode main())
Les applications Android sur des composants que le
système pourrait instancier quand il le faut
Ces composants principaux sont :
Components Description
Activités
Android
Tarak CHAARI
Activité
1)
OnPause
2)
3)
OnResume
4)
Android
Tarak CHAARI
onPause onResume (2/2)
Android
public class android.app.Activity
package android.app;
onCreate(..)
onStart();
Développeur Android OS
activité_1 = new Activité_1(); activité_1.onCreate();
startActivity(activité_1); activité_1.onStart();
Android
Tarak CHAARI
Démonstration, Activity dans tous ses états
public class ActivityLifeCycle extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("=======","onCreate");
// cf. page précédente
}
public void onDestroy(){
super.onDestroy();
Log.i("******", "onDestroy");
}
}
Android
Emulateur (ou terminal) + LogCat : traces bien utiles
Android
Démonstration, Activity dans tous ses états
public class ActivityLifeCycle extends Activity {
State Description
Android
64
Une activité est composée d’un ensemble de View
Android
Tarak Chaari (UHA) 65
Déclaration des activités dans le manifest de
l’application
Package principal
J2ME 67
67
Les resources
Un répertoire res est automatiquement créé lors de la
création d’un projet android (en plus d’un répertoire src)
/* AUTO-GENERATED FILE. DO NOT MODIFY. This class was
automatically generated by the
* aapt tool from the resource data it found. It should not be
/res modified by hand. */
anim
package cs454.demo;
drawable public final class R {
xhdpi public static final class attr {
}
hdpi public static final class drawable {
mdpi R.java public static final int icon=0x7f020000;
}
ldpi
public static final class id {
layout public static final int textview=0x7f050000;
}
values public static final class layout {
arrays.xml public static final int main=0x7f030000;
}
colors.xml
public static final class string {
strings.xml public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
xml }
raw }
Android
Tarak CHAARI
Types de ressources
Type Description
Dessin et image Images, icones et fichiers XMlL de dessin
(res/drawable) simple (rectangles, cercles…)
Android
Tarak CHAARI 69
Les sous types de ressources
Dans chaque type de ressources on peut avoir des sous
types (langue, taille de l’écran…)
Ces sous typessont spécifiés par des quantificateur
séparés par des “-”
res/<type_de_ressource>[<-quantificateur 1>…<-quantificateur N>]
Exemples de quantificateurs :
Langues : fr,en, fr-rFR, fr-rCA…
Taille de l’écran : small, normal, large, xlarge
résolution de l’écran : ldpi (160 dpi), mdpi (160 dpi), hdpi (240
dpi), xhdpi (320 dpi)
orientation de l’écran : land (paysage), port (portrait)
Les sous types les plus utilisés :
res/drawable-xhdpi, res/drawable-hdpi, res/drawable-ldpi,
res/drawable-mdpi, res/layout-land, res/layout, res/values-fr-rFR …
Android
Tarak CHAARI
Les ressources (2/2)
● Les ressources sont utilisées de la manière suivante:
– R.type_ressource.nom_ressource qui est de type int.
– Il s'agit de l'identifiant de la ressource.
● On peut alors utiliser cet identifiant ou récupérer l'instance de
la ressource en utilisant la classe Resources:
– Resources res = getResources();
– String hw = res.getString(R.string.hello);
– XXX o = res.getXXX(id);
● Une méthode spécifique pour les objets graphiques permet de
les récupérer à partir de leur id, ce qui permet d'agir sur ces
instances même si elles ont été créées via leur définition XML:
– TextView texte = (TextView)findViewById(R.id.le_texte);
– texte.setText("Here we go !");
J2ME 71
Référencement entre ressources
•On peut utiliser les ressources comme valeurs d’attributs dans d’autres
ressources sous forme XML. Cette possibilité est très utilisée dans les mises
en page par exemple.
•La notation pour faire référence à une autre ressource est la suivante :
–attribute="@[package_name:]resource_type/resource_identifier"
•En voici l’utilisation au sein d’un exemple qui crée une mise en page sous
forme de table (d’une ligne et de deux colonnes) dont les cellules sont
remplies par des chaînes de caractères :
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView android:text="@string/table_cellule_gauche" />
<TextView android:text="@string/table_cellule_droite" />
</TableRow>
</TableLayout>
J2ME 72
72
Les chaînes
•Les chaînes constantes de l'application sont situées
dans res/values/strings.xml.
•L'externalisation des chaînes permettra de réaliser
l'internationalisation de l'application.
•Voici un exemple:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello Hello JFL !</string>
<string name="app_name">AndroJF</string>
</resources>
•La récupération de la chaîne se fait via le code:
–Resources res = getResources();
–String hw = res.getString(R.string.hello);
J2ME 73
73
Internationalisation
•Le système de ressources permet de gérer facilement l'internationalisation
d'une application.
–Il
suffit de créer des répertoires values-XX où XX est le code de la langue que l'on
souhaite implanter.
–On place alors dans ce sous répertoire le fichier xml strings.xml contenant les
chaines traduites associées aux même clefs que dans values/strings.xml.
–Android chargera le fichier de ressources approprié en fonction de la langue du
système.
–On obtient par exemple pour les langues es (espagnol) et fr (français) l'arborescence:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
J2ME 74
74
Autres valeurs simples
•Plusieurs fichies xml peuvent être placés dans
res/values.
–Cela permet de définir des chaines, des couleurs, des
tableaux,...
•L'assistant de création permet de créer de nouveaux
fichiers de ressources contenant des valeurs simples,
comme par exemple un tableau de chaines:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="test">
<item>it1</item>
<item>it2</item>
</string-array>
</resources>
J2ME 75
75
Les couleurs
•Une couleur définit une valeur RVB (rouge, vert et bleu) et une
transparence.
–Cette couleur peut être utilisée à de multiples endroits comme pour définir la
couleur d’un texte.
–Il existe différents formats dont la syntaxe globale est la suivante :
<color name=nom_couleur>valeur_de_la_couleur</color>
●
J2ME 76
76
Les dimensions
•Les dimensions sont la plupart du temps référencées
dans les styles et les mises en page.
•Les unités prises en charge par Android : px (pixels), in
(pouces), mm (millimètres), pt (points), dp (density-
independant pixel), sp (scale-independant pixel).
–dp : une unité relative se basant sur une taille physique de l’écran
de 160 dpi.
●Avec cette unité, 1 dp est égal à 1 pixel sur un écran de 160 pixels.
–XML : @dimen/un_nom
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/taille_texte"/>
J2ME 78
78
Les images
J2ME 79
79
Les animations
•La déclaration d’animations contient des possibilités de rotation, de
fondu, de translation et de changements de taille. Les animations sont
placées dans un ou plusieurs fichiers dans le répertoire res/anim.
•Voici les quatre types d’animations proposées :
<alpha> : permet de faire un fondu ;
<scale> : définit un facteur d’échelle de départ et d’arrivée en X et Y ;
<translate> : permet de déplacer l’élément ;
<rotate> : propose une rotation avec un point pivot et un angle en degrés.
Android
Tarak CHAARI 81
Réalisation d’interface utilisateur sous Android
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
Linear Layout
Shows nested View elements
/* linear.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<LinearLayout android:orientation=“horizontal”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:layout_weight=“1”>
<TextView android:text=“red” />
<TextView android:text=“green” />
</LinearLayout>
<LinearLayout android:orientation=“vertical”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:layout_weight=“1”>
<TextView android:text=“row one” />
</LinearLayout>
Android
Tarak CHAARI
Elements and layouts
Table Layout
Like the HTML div tag
/* table.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<TableLayout android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:stretchColumns=“1”>
<TableRow>
<TextView android:layout_column=“1”
android:text=“Open...”
android:padding=“3dip” />
<TextView android:text=“Ctrl-O”
android:gravity=“right”
android:padding=“3dip” />
</TableRow>
</TableLayout>
Android
Tarak CHAARI
Elements and layouts
Grid View
/* grid.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<GridView
android:id=“@+id/gridview”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:columnWidth=“90dp”
android:numColumns=“auto_fit”
android:verticalSpacing=“10dp”
android:horizontalSpacing=“10dp”
android:stretchMode=“columnWidth”
android:gravity=“center”
/>
Android
Tarak CHAARI
Elements and layouts
Grid View
/* GridExample.java */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid);
gridview.setOnItemClickListener(
new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int pos, long id) {
Toast.makeText(
GridPrimer.this, "" + pos, Toast.LENGTH_SHORT).show();
}});
}
Android
Tarak CHAARI
Elements and layouts
Grid View
/* AdapterForGridView.java */
public class AdapterForGridView extends BaseAdapter {
private Context mContext;
public AdapterForGridView(Context c) { mContext = c; }
public int getCount() { return mThumbIDs.length; }
public Object getItem(int position) { return null;}
public long getItemId(int position) { return 0; }
Tab Layout
/* tab.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<TabHost android:id=“@android:id/tabhost”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”>
<LinearLayout android:orientation=“vertical”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”>
<TabWidget android:id=“@android:id/tabs”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”/>
<FrameLayout
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”/>
</LinearLayout>
</TabHost>
Android
Tarak CHAARI
Elements and layouts
Tab Layout
/* selector1.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<selector xmlns:android=“http://schemas.android.com/apk/res/android”>
<!– Tab is selected -->
<item android:drawable=“@drawable/ic_tab_1_selected”
android:state_selected=“true” />
<!– Tab not selected -->
<item android:drawable=“@drawable/ic_tab_1_not_selected” />
</selector>
/* selector2.xml */
/* selector3.xml */
Android
Tarak CHAARI
Elements and layouts
Tab Layout
/* Tab1.java */
public class Tab1 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Tab3.java */
Android
Tarak CHAARI
Elements and layouts
Tab Layout
/* TabExample.java */
public class TabExample extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
TabHost tabHost = getTabHost();
//--- tab 1 ---
Intent intent = new Intent().setClass(this, Tab1.class);
TabHost.TabSpec spec = tabHost.newTabSpec(“tab1”).setIndicator(
“Artists”, getResources().getDrawable(R.drawable.selector1))
.setContent(intent);
tabHost.addTab(spec);
//--- tab 1 ---
tabHost.setCurrentTab(2);
}
Android
Tarak CHAARI
Elements and layouts
List View
/* list_item.xml */
<?xml version=“1.0” encoding=“utf-8”?>
<TextView
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:padding=“10dp”
android:textSize=“16sp” />
Android
Tarak CHAARI
Elements and layouts
List View
/* ListViewExample.java */
public class ListViewExample extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
R.layout.list_item, COUNTRIES));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}});
}
Android
Tarak CHAARI
Elements and layouts
Button
ImageButton
EditText
CheckBox
RadioButton
ToggleButton
RatingBar
Android
Tarak CHAARI
Elements and layouts
DatePicker
TimePicker
Spinner
AutoComplete
Gallery
MapView
WebView
Android
Tarak CHAARI
Events
Event Handler
Hardware buttons
Event Listener
Touch screen
Android
Tarak CHAARI
Events
Android
Tarak CHAARI
Events
Android
Tarak CHAARI
Menus
J2ME 106
106
Aperçu sur les Intents (les intentions)
Exemples
startActivity(new Intent(Intent.VIEW_ACTION, Uri.parse("http://www..google.fr"));
startActivity(new Intent(Intent.EDIT_ACTION,Uri.parse("content://contacts/people/1"));
Android
Tarak CHAARI
Aperçu sur les Intent Filters
J2ME 115
115
Retour d'une activité (2/4)
•Lorsque l'activité parent reprend la main, il devient possible de
filtrer le code de retour dans la méthode onActivityResult pour
savoir si l'on revient ou pas de l'activité enfant.
J2ME 116
116
Retour d'une activité (3/4)
•Il est aussi possible de définir un résultat d'activité,
avant d'appeler explicitement la fin d'une activité avec
la méthode finish().
–Dans ce cas, la méthode setResult permet d'enregistrer un
code de retour qu'il sera aussi possible de filtrer dans l'activité
parente.
•Dans l'activité enfant, on met donc:
Button finish = (Button)findViewById(R.id.finish);
finish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setResult(50);
finish();}});
J2ME 117
117
Retour d'une activité (4/4)
J2ME 118
118
Solliciter d’autres applications (1/4)
•On utilise des objets Intent pour démarrer des
activités (via le nom du type d’activité) au sein d’une
même application
J2ME 119
119
Solliciter d’autres applications (2/4)
•Ainsi on exprime l’intention au système et le système se
chargera de la résoudre en proposant le composant de
l’application le plus approprié.
–Ce mécanisme permet d’éviter les dépendances vers des
applications puisque l’association entre l’application et le composant
nécessaire se fait au moment de l’exécution et non de la compilation.
J2ME 122
122
Ajouter des informations
•Les Intents permettent de transporter des informations à
destination de l'activité cible.
–On appelle ces informations des Extra
–Les méthodes permettant de les manipuler sont getExtra et putExtra.
J2ME 128
128
Filtrage d'un Intent par l'activité
•En déclarant un filtre au niveau du tag activity, l'application
déclare les types de messages qu'elle sait gérer et qui
l'invoquent.
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="andro.jf.nom_du_message" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
J2ME 130
130
Utilisation de catégories pour le filtrage (suite)
– Il faut en plus utiliser le tag data dans la construction du filtre:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="www.isecs.rnu.tn"/>
</intent-filter>
J2ME 131
131
Les messages natifs
•Un certain nombre de messages sont diffusés par le SE:
–ACTION_BOOT_COMPLETED: diffusé lorsque le système a fini son boot
–ACTION_SHUTDOWN: diffusé lorsque le système est en cours d'extinction
J2ME 132
132
Réception d’intents par un Broadcast Receiver
SMS
Android
Tarak CHAARI
Exemple d’un BroadcastReceiver
package com.tuto.android;
Android
Tarak CHAARI 134
Exemple d’un BroadcastReceiver
for (int i = 0; i < pdus.length; i++)
{ messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
Toast.makeText(context, "Expediteur : " +
messages[i].getDisplayOriginatingAddress(), Toast.LENGTH_LONG).show();
Toast.makeText(context, "Message : " + messages[i].getMessageBody(),
Toast.LENGTH_LONG).show();
}
• Dans le manifest
• Déclaration du Broad castReceiver
<receiver
class="com.tuto.android.SMSReceiver"android:name="com.tuto.android.SMSReceiver">
<intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
• Permissions nécessaires
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission. READ_SMS" />
Android
Tarak CHAARI 135
les Services et les contents providers
J2ME 136
136
Composants principaux : Les services
Un service est un composant qui n’a pas d’interface
graphique
Il tourne en tâche de fond pour une période
généralement indéterminée
Exemple: music player, Téléchargement, etc
Un service Android hérite de android.app.Service
La communication avec le service se fait à l’aide du
langage AIDL (Android Interface Definition Language).
Notification
Communication
Service
Pause/rewind Background
/stop/restart running
Media for playback
Player
Activity
Android
Tarak CHAARI
Cycle de vie d’un service Android
Deux façons d’utiliser un service
Le service peut être démarré ou arrêté au besoin
Démarrer par Context.startService()
Arrêter par Context.stopService()
Android
Tarak CHAARI
Cycle de vie d’un service Android (cont)
Android
Tarak CHAARI
Exemple d’un service Android
package com.tuto.android;
public class MonPremierService extends Service
{
private LocationManager locationMgr = null;
private LocationListener onLocationChange = new LocationListener()
{
public void onLocationChanged(Location location)
{
Toast.makeText(getBaseContext(),"coordonnées de votre téléphone : " + location.getLatitude()
+ " " + location.getLongitude(), Toast.LENGTH_LONG).show();
}
};
• Dans le manifest
• Déclaration du service
<service android:name="com.tuto.android.MonPremierService"/>
• Permissions nécessaires
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.LOCATION" />
Android
Tarak CHAARI 141
Composants principaux : Content Provider
Application
Activity Activity
Application Application
Content
Activity Service
Resolver
SQLite Remote
Data XML Store
www.redcad.org/members/tarak.chaari/
cours/cours_android.pdf
Android
Tarak CHAARI 144