javance cours android

Upload: afaf-fafa

Post on 05-Apr-2018

223 views

Category:

Documents


0 download

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