javance cours android
TRANSCRIPT
-
7/31/2019 Javance Cours Android
1/97
AndroidAmaury Gauthier
David Pequegnot
http://marketingbutcher.com/2011/05/25/android-cat-apps/
-
7/31/2019 Javance Cours Android
2/97
Rappels
-
7/31/2019 Javance Cours Android
3/97
Les OS pour tlphones mobiles (1)
Ce qui a facilit leur dploiement : une bonne connectivit ; du matriel fournissant un potentiel important des systmes d'exploitations qui sont capables de profiter
de ce potentiel
Premiers systmes d'exploitation : des systmes d'exploitation pour professionnels pas trs "user friendly" (Windows Mobile) pas forcment trs intuitif...
-
7/31/2019 Javance Cours Android
4/97
Les OS pour tlphones mobiles (2)
Puis... est arriv l'iPhone !
fluide, lgant, utilisation d'un acclromtre,
etc. avec une interface utilisateur trs intuitive
Et ensuite Android Windows Phone...
-
7/31/2019 Javance Cours Android
5/97
AndroidIntroduction
http://www.topito.com/top-chats-relax
-
7/31/2019 Javance Cours Android
6/97
Qu'est-ce ?
Un systme d'exploitation pour appareils connects Smartphones TablettesPDA
Tlvisions Autoradios
Une plateforme complte permettant le dveloppementd'applications tierces
-
7/31/2019 Javance Cours Android
7/97
Que propose la plateforme Android ?
Une machine virtuelle "Java" : Dalvik
Un framework applicatif pour le dveloppement d'applicationtierces
Un ensemble d'APIs afin d'interagir avec le matriel GPS, acclromtre, videmment GSM, ...
Un SDK complet : des outils pour la cration et la compilation de projets un plugin Eclipse un mulateur des outils de dbogage, profiling, etc.
-
7/31/2019 Javance Cours Android
8/97
Architecture
-
7/31/2019 Javance Cours Android
9/97
Profiles
API levels minSDKVersion
targetSdkVersion
Compatibilitascendente
Compatibilitdescendente
Platform Version API Level VERSION_CODE
Android 3.2 13 HONEYCOMB_MR2
Android 3.1.x 12 HONEYCOMB_MR1Android 3.0.x 11 HONEYCOMB
Android 2.3.4Android 2.3.3
10GINGERBREAD_MR
1
Android 2.3.2Android 2.3.1
Android 2.3
9 GINGERBREAD
Android 2.2.x 8 FROYO
Android 2.1.x 7 ECLAIR_MR1
Android 2.0.1 6 ECLAIR_0_1
Android 2.0 5 ECLAIR
Android 1.6 4 DONUT
Android 1.5 3 CUPCAKE
Android 1.1 2 BASE_1_1
Android 1.0 1 BASE
-
7/31/2019 Javance Cours Android
10/97
Android Virtual Device
Comment tester une application sur diffrent profiles ?
AVD : profile matriel API level skin (taille de l'cran, apparence, etc.) priphrique de stockage (mulation de carte SD)
Gestion des AVD depuis AVD Manager ou depuis lacommande android
-
7/31/2019 Javance Cours Android
11/97
Android Virtual Device
http://www.caffeinedi.com/wp-content/uploads/2010/07/Snake-in-Android-Virtual-Device.png
-
7/31/2019 Javance Cours Android
12/97
AndroidCrer un projet
http://www.topito.com/top-chats-relax
-
7/31/2019 Javance Cours Android
13/97
Structure des projets Androidroot
AndroidManifest.xml Fichiers Ant :
build.xml, default.properties, local.properties /bin : rsultat de compilations
/gen : code source gnr par les outils de compilationAndroid /libs : jar externes /src : code source Java /res : ressources /tests : tests pour votre application Android /assets : fichiers statiques pour le dploiement sur le
terminal
-
7/31/2019 Javance Cours Android
14/97
Structure des projets Androidres
Dossier contenant les ressources Ressources identifies automatiquement par le systmeAndroid
Contenu :
/res/anim/ : animations courtes /res/color/ : couleurs /res/drawable/ : images /res/layout/ : layout pour les interfaces /res/menu/ : contenu des menus /res/strings/ : chanes de caractres /res/values/ : constantes /res/xml/ : stocke vos propres donnes etc.
-
7/31/2019 Javance Cours Android
15/97
Structure des projets Androidbin
Rsultat de la compilation Contenu :
/bin/classes/ : classiques fichiers Java compils /bin/classes.dex
/bin/.ap_ : ressources zippes /bin/-debug.apk ou /bin/-unsigned.apk
Cration des cls pour signature avec keytoolkeytool -genkey -v -keystore nyancat.keystore \
-alias nyan -keyalg DSA -validity 10000
Modifier le fichierbuild.properties en consquence key.store=/chemin/vers/nyancat.keystore key.alias=nyan
-
7/31/2019 Javance Cours Android
16/97
Structure des projets AndroidLa premire fois...
Possibilit d'utiliser la ligne de commande ou un IDE(Eclipse, Netbeans, Intellij Idea, ...)
$ android create project --target \--path /chemin/vers/le/projet/ \--activity \
--package Exemple :
$ android create project --target 2 \--path /home/nyan/workspace/NyanRoxxTheWorld \--activity NyanActivity \--package nyan.roxx.the.world
Cible : Android 1.1 Activit principal : NyanActivity Package : nyan.roxx.the.world
L'arborescence est automatiquement cre
-
7/31/2019 Javance Cours Android
17/97
Composants d'une applicationQuelques dfinitions...
Activit (Activity) Une vue de l'application Possibilit de partager une activit avec d'autres
applications
tend la classe Activity
Service Un composant logiciel qui va fonctionner en arrire-plan Ne fournit pas d'interface utilisateur Idal pour certaines oprations longues ou d'accs
des fichiers distants tend la classe Service
-
7/31/2019 Javance Cours Android
18/97
Composants d'une applicationQuelques dfinitions...
Fournisseur de contenu (Content Provider) Permet de grer des donnes via une abstraction SQLite, fichiers, serveurs, etc. Partage des donnes entre applications :
l'application peut fournir ou obtenir des donnes partir d'une autre tend la classe ContentProvider
Broadcast receivers Rceptionner des vnements systme via des
intentions Pas d'UI Minimal : possibilit de lancer une notification dans la
barre de status
tend la classe BroadcastReceiver
-
7/31/2019 Javance Cours Android
19/97
Composants d'une applicationQuelques dfinitions...
Intentions (Intents) Messages asynchrones Une application peut rpondre une intention... ... ou en crer
Possibilit d'activer une activit, un service ou unbroadcast receiver grce aux intentions
-
7/31/2019 Javance Cours Android
20/97
ManifestAperu
AndroidManifest.xml
Peut contenir beaucoup d'informations
Dcrit la structure et certaines proprits de l'application l'API level utiliser dclaration des activits (dont la principale), services,
fournisseurs de contenu ... les ractions aux intents les pr-requis du terminal etc.
http://www.topito.com/top-chats-relax
-
7/31/2019 Javance Cours Android
21/97
ManifestStructure
Fichier xml Base :
...
L'attribut package permet de dfinir le package de basepour les classes Java
.NyanNyan => nyan.roxx.the.world.NyanNyan
-
7/31/2019 Javance Cours Android
22/97
ManifestMa premire activit
Dclaration de l'activit principale :
-
7/31/2019 Javance Cours Android
23/97
ManifestPrincipaux attributs
Dclaration de l'activit principale :
...
-
7/31/2019 Javance Cours Android
24/97
Classe R
Classe auto-gnre par les outils Android Ne pas essayer de modifier cette classe !
Package android Disponible dans le dossier/gen/
Permet d'accder aux ressources dans le code Java R.drawable.nyan_picture (image dans le dossier/res/drawable/)
R.string.nyanvoice (string dans le fichier/res/values/filename.xml)
R.color.nyancolor(couleur dans le fichier/res/values/filename.xml)
R.id.nyanTextView (identifiant d'une "vue" dans unlayout)
-
7/31/2019 Javance Cours Android
25/97
Classe RStocker des Strings, tableaux de Strings et des pluriels
Fichier xml dans le dossier/res/values/ Nom des fichiers au choix du dveloppeur Exemple :
Nyan nyan!
nyan!miahou!
Nyan catNyan cats
-
7/31/2019 Javance Cours Android
26/97
Android
Activities
-
7/31/2019 Javance Cours Android
27/97
ActivityIntroduction
lment de base : fourni un cran contenantdes objets graphiques avec lesquelsl'utilisateur peut interagir
Chaque activity possde une fentre surlaquelle les lments graphiques sontdessins
Un application est compos d'un ensembled'activities formant une IHM cohrante
Chaque application possde une activityprincipale dmarre automatiquement Il existe un plugin Eclipse pour concevoir la
vue d'une Activity (WYSIWYG).
-
7/31/2019 Javance Cours Android
28/97
ActivityStack
-
7/31/2019 Javance Cours Android
29/97
ActivityCycle de vie
-
7/31/2019 Javance Cours Android
30/97
Squelette d'une activity Crer une classe qui hrite de Activity (ou d'une de ses
sous classes)
Surcharger les mthodes suivantes : onCreate(Bundle bundle) onPause() onSaveInstanceState(Bundle outState)
Pour chaque mthode surcharge il faut appeler la mthodede la classe mre
La vue affiche par l'activity est une hirarchie d'objet detype View
Chaque objet de type View gre son affichage et
ses vnements
-
7/31/2019 Javance Cours Android
31/97
Squelette d'une activityAndroidManifest.xml
...
...
android:allowTaskReparenting android:alwaysRetainTaskState android:clearTaskOnLaunch android:configChanges android:enabled android:excludeFromRecents android:exported
android:finishOnTaskLaunch android:hardwareAccelerated android:icon android:label android:launchMode android:name android:noHistory
android:permission android:process android:screenOrientation android:stateNotNeeded android:taskAffinity android:windowSoftInputMode
-
7/31/2019 Javance Cours Android
32/97
Squelette d'une activity
public classCalendarActivity
extendsActivity {
static final int DAY_VIEW_MODE = 0; static final int WEEK_VIEW_MODE = 1;
private SharedPreferences mPrefs; private int mCurViewMode;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
SharedPreferences mPrefs = getSharedPreferences();mCurViewMode = mPrefs.getInt("view_mode" DAY_VIEW_MODE);
}
protected void onPause() {
super.onPause();
SharedPreferences.Editor ed = mPrefs.edit();ed.putInt("view_mode", mCurViewMode);ed.commit();
}}
-
7/31/2019 Javance Cours Android
33/97
Squelette d'une activity
private void pickContact() {
// Create an intent to "pick" a contact, as defined by the content provider URIIntent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);startActivityForResult(intent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //If the request went well (OK) and the request was PICK_CONTACT_REQUEST
if(resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { //Perform a query to the contact's content provider for the contact's name
Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if(cursor.moveToFirst()) { // True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(columnIndex); //Do something with the selected contact's name...
}}
}
-
7/31/2019 Javance Cours Android
34/97
Layout XML
Permet de ne pas utiliser de code Java pour la compositionde l'interface utilisateur
Association des composants (widgets) avec les conteneurs organisation et placement des widgets
Fichier sauvegard dans /res/layout/ souvent nomm /res/layout/main.xml pourl'activit principale
chaque modification des layouts, R.java va tre modifivia l'outil Android Asset Packaging Tool (AAPT)
Ainsi, les identifiants des lments pourront treaccessible viafindViewById(R.id.element)
-
7/31/2019 Javance Cours Android
35/97
Layout XMLExemple
Ici, un exemple de label qui va afficher le texteHello World, HelloWorld!
TextView tv = (TextView) findViewById(R.id.label)
Si le texte n'est pas sens tre modifi, ne pas dclarer d'id fill_parent = remplit le conteneur parent (ici en largeur) wrap_content = n'occupe que le ncessaire (ici en hauteur)
-
7/31/2019 Javance Cours Android
36/97
Layout XMLExemple
-
7/31/2019 Javance Cours Android
37/97
Layout XMLUtiliser les ressources
Fichier/res/layout/main.xml
Fichier/res/values/hello.xml
Hello World, HelloWorld!
-
7/31/2019 Javance Cours Android
38/97
Layout XMLDclaration dans l'activit
...public class NyanActivity extends Activity {...
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.label);tv.setText("Hello, Nyan!");
}
...}
-
7/31/2019 Javance Cours Android
39/97
Conteneurs
Placement des Widgets (composants graphiques) sur l'cran Notions de :
Orientation (horizontal, vertical) android:orientation="vertical"
Remplissage android:layout_width, android:layout_height taille en px, wrap_content, fill_parent
Poids (android:layout_weight) Gravit
android:gravity left, center_horizontal, right, etc.
Padding (android:padding, ou android:paddingRight, android:paddingTop, android:paddingBottom, android:paddingLeft)
-
7/31/2019 Javance Cours Android
40/97
ConteneursLinearLayout (1)
...
-
7/31/2019 Javance Cours Android
41/97
ConteneursLinearLayout (2)
...
-
7/31/2019 Javance Cours Android
42/97
ConteneursRelativeLayout (1)
-
7/31/2019 Javance Cours Android
43/97
ConteneursRelativeLayout (2)
C
-
7/31/2019 Javance Cours Android
44/97
ConteneursTableLayout (1)
......
C
-
7/31/2019 Javance Cours Android
45/97
ConteneursScrollView
Rend possible le scrolling de la vue lorsque le contenudpasse la taille de l'cran
En gnral conteneur de plus haut niveau...
...
C t
-
7/31/2019 Javance Cours Android
46/97
ConteneursAutres
Grid View
Tab Layout
List View
Web View
etc.
Wid t
-
7/31/2019 Javance Cours Android
47/97
Widget
Comme avec Swing (ou AWT), il existe un nombreimportant de widgets
Ce sont des objets permettant d'interagir avec l'utilisateuren affichant des informations, demandant des entres, etc.
En gnral, dclars dans le fichier XML de layout etaccessibles viafindViewById(R.id.element) JavaDoc complte !
Package android.widget
Hritent de View
Wid t
-
7/31/2019 Javance Cours Android
48/97
WidgetExemple TextView
http://mobile.tutsplus.com/tutorials/android/customize-android-fonts/
Wid t
-
7/31/2019 Javance Cours Android
49/97
WidgetExemple Button
http://blog.webagesolutions.com/archives/154
Wid t
-
7/31/2019 Javance Cours Android
50/97
WidgetExemple ImageView
http://www.onesecretlife.com/archives/3762
Wid t
-
7/31/2019 Javance Cours Android
51/97
WidgetExemple EditText
http://androidforbeginners.blogspot.
com/2010/03/default-text-for-edittext-heres-hint.html
Wid t
-
7/31/2019 Javance Cours Android
52/97
WidgetExemple CheckBox
http://www.androidpeople.com/android-checkbox-example
G ti d t
-
7/31/2019 Javance Cours Android
53/97
Gestion des vnementsIntroduction
Chaque objet de type View peut grerses venements
La classe View possde un ensembled'interfaces pour chaque type
d'vnement : View.OnClickListener View.OnLongClickListener View.OnKeyListener View.OnTouchListener
L'ensemble des objets View fonctionnedans un mme thread (mme problmeque pour Swing!)
G ti d t
-
7/31/2019 Javance Cours Android
54/97
Gestion des vnementsExemple
finalEditText edittext =(EditText) findViewById(R.id.edittext);edittext.setOnKeyListener(newOnKeyListener(){ publicboolean onKey(View v,int keyCode,KeyEventevent){ // If the event is a key-down event on the "enter" button if((event.getAction()==KeyEvent.ACTION_DOWN)&& (keyCode ==KeyEvent.KEYCODE_ENTER)){ // Perform action on key press Toast.makeText(HelloFormStuff.this, edittext.getText(),Toast.LENGTH_SHORT).show();
returntrue; } returnfalse; }});
finalCheckBox checkbox =(CheckBox) findViewById(R.id.checkbox);checkbox.setOnClickListener(newOnClickListener(){ publicvoid onClick(View v){
// Perform action on clicks, depending on whether it's now checked if(((CheckBox) v).isChecked()){ Toast.makeText(HelloFormStuff.this,"Selected",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(HelloFormStuff.this,"Not selected",Toast.LENGTH_SHORT).show(); } }});
N tifi ti
-
7/31/2019 Javance Cours Android
55/97
NotificationsToast
Message de type pop-up Apparat au-dessus de l'activit, temporairement Peut tre affich par une activit ou un service
Context context = getApplicationContext();CharSequence text = "GuiiiiGuiiiiiiiii!";int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);toast.show();
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
Notifications
-
7/31/2019 Javance Cours Android
56/97
NotificationsBarre de status (1)
Notification apparaissant dans la barre de status Ncessite
Icne Titre
Message PendingIntent Possibilits d'ajouter
TickerSon
Vibration Notifications visuelles (LED)
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Notifications
-
7/31/2019 Javance Cours Android
57/97
NotificationsBarre de status (2)
String ns = Context.NOTIFICATION_SERVICE;NotificationManager mNotificationManager =
(NotificationManager) getSystemService(ns);
int icon = R.drawable.notification_icon;CharSequence tickerText = "Hello";long when = System.currentTimeMillis();
Notification notification =new Notification(icon, tickerText, when);Context context = getApplicationContext();CharSequence contentTitle = "My notification";CharSequence contentText = "Hello World!";Intent notificationIntent = new Intent(this, MyClass.class);PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle,contentText, contentIntent);
-
7/31/2019 Javance Cours Android
58/97
Android
Content Provider
Qu'est ce que c'est ?
-
7/31/2019 Javance Cours Android
59/97
Qu'est-ce que c'est ?
Fournisseur de contenu Les ressources sont accessibles via des Uris
content://
content://identifiant/ressource Exemple :content://angry.birds/green.pig.king
Possibilits de crer, lire, mettre jour et supprimer des
ressources Abstraction sur la manire dont sont stockes les
ressources Dpend du fournisseur de contenu
Interroger un fournisseur de contenu
-
7/31/2019 Javance Cours Android
60/97
Interroger un fournisseur de contenu
Constantes dans le package android.provider Contact.People.CONTENT_URI Contact.Phones.CONTENT_URI etc.
Utilisation de la mthode managedQuery(...)
Prend en paramtres : L'Uri du fournisseur de contenu ou de l'instance de
l'objet Les proprits ( colonnes dans un SGBD)
Une contrainte de slection (WHERE) Paramtres de la contrainte de slection Paramtre de tri
Retourne une instance de Cursor Design pattern Iterator!
Interroger un fournisseur de contenu
-
7/31/2019 Javance Cours Android
61/97
Interroger un fournisseur de contenuExemple (1)
private static final String[] PROPERTIES = new String[] {Contact.People._ID, Contact.People.DISPLAY_NAME,Contact.People.NUMBER, Contact.People.TYPE } ;
...
Cursor cursor = managedQuery(Contact.People.CONTENT_URI, PROPERTIES, null, null, null);
Interroger un fournisseur de contenu
-
7/31/2019 Javance Cours Android
62/97
Interroger un fournisseur de contenuExemple (2)
if (cursor.moveToFirst()) {int peopleID;String peopleDisplayName;String peopleNumber;String peopleNumberType;int idIdx = cursor.getColumnIndex(Contact.People._ID);
int displayNameIdx = cursor.getColumnIndex(Contact.People.DISPLAY_NAME);int numberIdx = cursor.getColumnIndex(Contact.People.NUMBER);int peopleNumberType = cursor.getColumnIndex(Contact.People.TYPE);
do {peopleId = cursor.getInteger(idIdx);peopleDisplayName = cursor.getString(displayNameIdx);
...} while (cursor.moveToNext());...
}...
Ajouter supprimer mettre jour
-
7/31/2019 Javance Cours Android
63/97
Ajouter, supprimer, mettre jour
ContentResolver Mthodes :
final Uri insert(Uri url, ContentValues values) final int delete(Uri url, String where, String[] args) final int update(Uri url, ContentValues values, String where, String[] args)
ContentValues Contient un ensemble de cls/valeurs Ici, identifiant de la colonne et valeur
Ajout avec la mthode put(String key, value)
Crer un fournisseur de contenus (1)
-
7/31/2019 Javance Cours Android
64/97
Crer un fournisseur de contenus (1)
tendre la classe ContentProvider Redfinition des mthodes :
boolean onCreate();
Cursor query(Uri url, String[] properties, String where, String[] args, String sort) Uri insert(Uri url, ContentValues values) int update(Uri url, ContentValues values, String where, String[] args) int delete(Uri url, String where, String[] args) String getType(Uri url)
Type MIME :
vnd..cursor.dir/type vnd..cursor.item/type
Crer un fournisseur de contenus (2)
-
7/31/2019 Javance Cours Android
65/97
Crer un fournisseur de contenus (2)
Fournir une Uripublic final static Uri CONTENT_URI = Uri.parse("content://fr.unilim.java.avance.Miahou/cats");
Dclarer les noms de colonnes (proprits) Classe public static final implmentant BaseColumns
public static final class MiahouColumns implements BaseColumns {
public static final Uri CONTENT_URI = Uri.parse("content://fr.unilim.java.avance.Miahou/MiahouColumns");
public static final String NAME = "name";public static final String BELL = "bell";...
}
Dclarer le fournisseur dans le manifest
voir
-
7/31/2019 Javance Cours Android
66/97
voir...
Ncessit d'avoir certaines permissions afin d'accder auxfournisseurs de contenu (READ_CONTACTS par exemple)
Depuis Android 2.0 Utilisation de ContactsContract ContactsContract.* (Contacts, RawContacts, PhoneLookup ...
managedQuery(...) deprecated
Utilisation de CursorLoader viter les blocages de l'UI (AsyncTaskLoader)
Android
-
7/31/2019 Javance Cours Android
67/97
Android
Graphisme
Diffrentes stratgies
-
7/31/2019 Javance Cours Android
68/97
Diffrentes stratgies
2D : dessiner directement dans un objet View dessiner dans un Canvas
3D : OpenGL ES
http://developer.android.com/guide/topics/ graphics/opengl.html
renderscript http://developer.android.com/guide/topics/ renderscript/index.html
View
http://developer.android.com/guide/topics/graphics/opengl.htmlhttp://developer.android.com/guide/topics/renderscript/index.htmlhttp://developer.android.com/guide/topics/renderscript/index.htmlhttp://developer.android.com/guide/topics/graphics/opengl.htmlhttp://developer.android.com/guide/topics/graphics/opengl.html -
7/31/2019 Javance Cours Android
69/97
View
publicclassCustomDrawableViewextendsView{ privateShapeDrawable mDrawable;
publicCustomDrawableView(Context context){ super(context);
int x =10; int y =10; int width =300; int height =50;
mDrawable =newShapeDrawable(newOvalShape());mDrawable.getPaint().setColor(0xff74AC23);mDrawable.setBounds(x, y, x + width, y + height);
}
protectedvoid onDraw(Canvas canvas){mDrawable.draw(canvas);
}}
Canvas
-
7/31/2019 Javance Cours Android
70/97
Canvas
implmentation de la mthode onDraw (Canvas canvas) d'unobjet View
appel de la mthode invalidate ()
tendre la classe SurfaceView implmenter les classes SurfaceHolder.Callbacket Thread http://developer.android.com/resources/
samples/LunarLander/src/com/example/ android/lunarlander/LunarView.html
Android
http://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.htmlhttp://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html -
7/31/2019 Javance Cours Android
71/97
AndroidScurit
Scurit dans Android
-
7/31/2019 Javance Cours Android
72/97
Scurit dans Android
Plusieurs mcanismes de scurit
Systme de permissions Signature de l'application
Mcanisme de SandBox
Chaque application dans une instance de Dalvik Chaque application dans un processus Linux
Obtenir des permissions
-
7/31/2019 Javance Cours Android
73/97
Obtenir des permissions
Utilisation de uses-permissiondans le manifest voir partie relative au manifest
Package android.Manifest.permission Exemples :
BRICK : peut dsactiver l'appareil(dangereux ;-))
INTERNET : autorise l'ouverture desockets
READ_SMS : permet la lecture de SMS
http://news.cnet.com/8301-27080_3-20008518-245.html
Demander des permissions (1)
-
7/31/2019 Javance Cours Android
74/97
Demander des permissions (1)
Dclarer les permissions possibles
Indiquer l'endroit o s'applique la permission Activit, services, broadcast receivers Exemple :
...
Demander des permissions (2)
-
7/31/2019 Javance Cours Android
75/97
Demander des permissions (2)
Fournisseurs de contenu bnficient de deux attributssupplmentaires :
android:readPermission android:writePermission
Services : possibilits de vrifier les permissions grce lamthodeService#checkCallingPermission(String permission)
il existe d'autres mthodes pour tester les permissions
(voir classe Service)
Possibilit d'inclure une permission la mthode sendBroadcast(Intent intent, String receiverPermission)
-
7/31/2019 Javance Cours Android
76/97
Intents
Les Intents
-
7/31/2019 Javance Cours Android
77/97
Les Intents
Systme de messages abstrait contenant un ensemble dedonnes permettant la ralisation d'actions
Une intention peut tre fournie tous les types decomposants : activits, services, broadcast receivers
Selon l'intention, Android va choisir la meilleurs action excuter Intent peut prendre en paramtre de constructeur :
une action une action et une Uri
un contexte et une classe une action, une Uri, un contexte et une classe
Les Intents
-
7/31/2019 Javance Cours Android
78/97
Les IntentsEnvoyer une intention
Dmarrer une activit : Context#startActivity, Activity#startActivityForResult (et
rsultat avec Activity#setResult) Dmarrer un service :
Context#startService
Dmarrer un broadcast receiver Context#sendBroadcast
Les Intents
-
7/31/2019 Javance Cours Android
79/97
Les IntentsParamtres
Action : le type d'action excuter (ACTION_CALL,ACTION_EDIT...)
Data : des donnes sous la forme d'une Uri (par exemple
tel://) Category : le type de composant qui doit grer l'intention
(CATEGORY_LAUNCHER ...)
Extra : donnes additionnelles qui peuvent tre passes une intension sous la forme de cls/valeurs
Flags : options supplmentaires sur la gestion de l'intention(FLAG_ACTIVITY_NO_HISTORY ...)
Les Intents
-
7/31/2019 Javance Cours Android
80/97
Les IntentsFilters
Dclaration des types d'intention auxquels le composantpeut rpondre
Exemple d'une application de gestion de notes Pour l'activit principale :
Autres filtres :
Android
-
7/31/2019 Javance Cours Android
81/97
Misc
Threads
-
7/31/2019 Javance Cours Android
82/97
Threads
Toute opration longue peut tre bloquante pourl'application (freeze)
Utilisation des threads (tches) !
Possibilit d'utilisation des threads Java (Thread etRunnable)
Possibilit d'utilisation d'un Handler Envoi de messages
sendMessage pour l'envoi obtainMessage pour en recevoir
ou de runnablepost pour attacher un thread au handler
Threads
-
7/31/2019 Javance Cours Android
83/97
ThreadsExemple Handler
Handler handler = new Handler() { // Handler declaration
@Overridepublic void handleMessage(Message msg) {
// Do something (set a progress bar for instance)}
}...
// Add the onStart method in the Activitypublic void onStart() {super.onStart();Thread thread = new Thread(new Runnable() {
public void run() {// Do somethingMessage message = handler.obtainMessage();
// Do something on messagehandler.sendMessage(message)
}}thread.start();
}
Threads
-
7/31/2019 Javance Cours Android
84/97
ThreadsAsyncTask
AsyncTask a t cre pour grer les petites tches Ressemble SwingWorker Trois paramtres de gnricit :
Paramtre
Progression Rsultat Mthodes pouvant tre redfinies :
doInBackground(Paramtre ... params) onCancelled(Rsultat res)
onProgressUpdate(Progression ... progs) onPostExecute(Rsultat res)
Possibilit de publier un rsultat via la mthodepublishProgress(Progression prog)
Logcat
-
7/31/2019 Javance Cours Android
85/97
Logcat
Framework de journalisation lger android.util.Log
Plusieurs niveaux :
Log.v(String tag, String message[, String Throwable]) Log.d(String tag, String message[, String Throwable]) Log.i(String tag, String message[, String Throwable]) Log.w(String tag, String message[, String Throwable]) Log.e(String tag, String message[, String Throwable])
Rcuprer les logs : $ adb logcat (shell) Window > Show View > Logcat (Eclipse)
Android Debug Bridge
-
7/31/2019 Javance Cours Android
86/97
g g
Outil pour communiquer avec un AVD ou un priphriqueAndroid
Commande adb ou outils dans Eclipse
Permet : l'installation d'application : adb install une_app.apk d'avoir un shell sur le priphrique : adb shell rcuprer les logs : adb logcat
Internationalisation
-
7/31/2019 Javance Cours Android
87/97
Internationalisation permet d'avoir une application dansplusieurs langues
Android facilite la mise en place de l'internationalisation Utiliser les ressources pour stocker les chanes de
caractres /res/values/ Le systme de dossier permet l'internationalisation
/res/values/ /res/values-en/
/res/values-fr/ /res/values-fr-rCA/ /res/values/ agit comme ressource par dfaut (important
d'en spcifier)
Gestion des ressources
-
7/31/2019 Javance Cours Android
88/97
Appliquer le principe d'internationalisation d'autresressources
/res/-/ /res/drawable-xlarge/
Les qualifierpeuvent s'appliquer tous les types deressources (mme celles concernant le langage) Exemples de qualifier:
port ou land pour l'orientation ldpi, mdpi, ... pour la densit
notouch, stylus, finger nonav, dpad, trackball, wheel v3, v7, v10, ...
http://developer.android.com/guide/topics/resources/providing-resources.html
Capteurs
-
7/31/2019 Javance Cours Android
89/97
pAcclromtre
Rotation par dfaut ! :-D Possibilit de dfinir un sens par dfaut et invariable pour
une activit : attribut : android:screenOrientation valeurs : portrait ou landscape
Possibilit de grer manuellement le changementd'orientation
utiliser l'attribut: android:configChanges="orientation" implmenter la mthode onConfigurationChanged(Configuration
newConfig) Si changement de layout selon orientation :
res/layout-port/main.xml (portrait) res/layout-land/main.xml (paysage) mme extensions de dossier pour les autres ressources
Capteurs
-
7/31/2019 Javance Cours Android
90/97
pLocalisation (1)
Obtenir la localisation ncessite des permissions : android.permission.ACCESS_COARSE_LOCATION (NETWORK_PROVIDER) android.permission.ACCESS_FINE_LOCATION (GPS_PROVIDER)
tapes : Obtenir une instance de LocationManager
LocationManager locationManager =this.getSystemService(Context.LOCATION_SERVICE)
Crer une instance de LocationListenerpour grer lesvnements lis au service de localisation (nouvellelocalisation, activation ou dsactivation d'un provider...)
LocationListener locationListener = new LocationListener() {public void onLocationChanged(Location location) {...}public void onStatusChanged(String provider, int status, Bundle extras) {...}public void onProviderEnabled(String provider) {...}public void onProviderDisabled(String provider) {...}
};
Capteurs
-
7/31/2019 Javance Cours Android
91/97
pLocalisation (2)
Dclarer le listener :locationManager.requestLocationUpdates(String provider, long minTime, float minDistance,PendingIntent intent)
providerpeut tre : LocationManager.GPS_PROVIDER LocationManager.NETWORK_PROVIDER LocationManager.PASSIVE_PROVIDER
exemple :locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, locationListener)
Tests unitaires
-
7/31/2019 Javance Cours Android
92/97
Permettent de tester une application
Dfinition des comportementsattendus
bref, des tests unitaires...
dveloppement orient tests
Possibilit de tester une applicationAndroid
tester la couche mtier (classique) tester l'interface utilisateur
Pas vraiment trivial avec Android...
Tests unitaires
-
7/31/2019 Javance Cours Android
93/97
Tester une activit
tendre la classe ActivityInstrumentationTestCase2 Dfinitions
dans le constructeur :super("", .class);
setUp(), tearDown() dfinition des tests
assert* pour faire les assertions assertTrue, assertEquals, etc.
Obtenir l'activit avec la mthode getActivity()
Possibilit d'utiliser la classe R Possibilit d'excuter une tche dans le thread de l'interfaceutilisateur avec Activity#runOnUiThread
Tests unitaires
http://code.google.com/p/robotium/ -
7/31/2019 Javance Cours Android
94/97
Possibilit de tester tous les composants Android : ProviderTestCase2 (fournisseurs de contenus) ServiceTestCase (services)... Package android.test
Possibilit d'utiliser des mocks objects android.test.mock Cursor, Application, ContentProvider, Resources,
ContentResolver...
Autre framework de test unitaire: Robotium (http://code.google.com/p/robotium/)
Native Development Kit
http://code.google.com/p/robotium/http://code.google.com/p/robotium/ -
7/31/2019 Javance Cours Android
95/97
p
Permet de programmer unepartie d'une application en C ou
C++
utiliser avec parcimonie...
Permet d'utiliser desinstructions SIMD par exemple
Langages de programmation
-
7/31/2019 Javance Cours Android
96/97
g g p g
En thorie tous les langages fonctionnant au dessus d'uneJVM peuvent servir crer des applications Android
.java .class .dex .foo .class .dex
JRuby
Scala
Clojure
-
7/31/2019 Javance Cours Android
97/97