D Veloppement Sous Android Part3

download D Veloppement Sous Android Part3

of 7

Transcript of D Veloppement Sous Android Part3

  • 7/25/2019 D Veloppement Sous Android Part3

    1/7

    INTENTS

    Partie 356

    Dveloppement sous Android - Mlle TRIMECH R

    Principe

    Les Intents permettent de grer l'envoi et la rception de messages

    afin de faire cooprer les applications. Le but des Intents est de

    dlguer une action un autre composant, une autre application ou

    une autre activit de l'application courante.

    On peut envoyer des Intents informatifs pour faire passer des

    messages. Mais on peut aussi envoyer des Intents servant lancer

    une nouvelle activit.

    57

    Dveloppement sous Android - Mlle TRIMECH R

    Principe

    Un objet Intentcontient les information suivantes:

    le nom du composant cibl (facultatif)

    l'action raliser, sous forme de chaine de caractres

    les donnes: contenu MIME et URI

    des donnes supplmentaires sous forme de paires clef/valeur

    (key/value)

    une catgorie pour cibler un type d'application

    des drapeaux (flags /informations supplmentaires)

    58

    Dveloppement sous Android - Mlle TRIMECH R

    59

    Classification desClassification des IntentsIntents

    Premire

    Section

    Dveloppement sous Android - Mlle TRIMECH R

    Intents

    Explicites Implicites

  • 7/25/2019 D Veloppement Sous Android Part3

    2/7

    Intent ExpliciteIntent Explicite Intent ImpliciteIntent Implicite

    Dveloppement sous Android - Mlle TRIMECH R

    Spcifie le composant dmarrer par nom

    (nom complet de la classe)

    Permet de dmarrer un composant de

    votre propre application, car le nom de la

    classe est connu

    Exemple: dmarrer une activit en

    rponse laction dun utilisateur

    Ne nomme pas un composant spcifique,

    mais dclarent une action raliser

    Permet un composant dune application

    dappeler un composant dune autre

    application

    Exemple: montrer lutilisateur un

    emplacement sur une Map

    60

    Premire Classification

    Intent Explicite

    Dveloppement sous Android - Mlle TRIMECH R

    61

    Si l'on passe la main une activit interne l'application, on peut

    crer l'Intent et passer la classe de l'activit cible par l'Intent:

    Le premier paramtre de construction de l'Intent est en fait le

    contexte de l'application. Dans certain cas, il ne faut pas mettre

    this mais faire appel getApplicationContext() si l'objet

    manipulant l'Intentn'hrite pas de Context.

    Intent login = new Intent(this, GiveLogin.class);

    startActivity(login);

    Intent Implicite

    Dveloppement sous Android - Mlle TRIMECH R

    62

    S'il s'agit de passer la main une autre application, on donne au

    constructeur de l'Intent les donnes et l'URI cible:

    l'OS est charg de trouver une application pouvant rpondre l'Intent.

    Exemple

    Dveloppement sous Android - Mlle TRIMECH R

    63

    Pour lancer un appel partir dune activit A :

    1. Activit A cre un Intent avec une action et le passe en paramtre la

    mthode startActivity .

    2. Le systme Android cherchent toutes les applications pour trouver un Intent

    Filter qui correspond cet Intent.

    3. Quand une correspondance est trouve, le systme dmarrent lactivit

    demande en invoquant sa mthode onCreate et en lui passant lintent

    Uri telnumber = Uri.parse("tel:0248484000");

    Intent call = new Intent(Intent.ACTION_DIAL, telnumber);

    startActivity(call);

  • 7/25/2019 D Veloppement Sous Android Part3

    3/7

    Intent + Action : Oui cest possible!

    Dveloppement sous Android - Mlle TRIMECH R

    64

    On peut associer le lancement dun intent une action:

    Buttonb= (Button)findViewById(R.id.Button01);

    b.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

    Uri telnumber = Uri.parse("tel:0248484000");

    Intent call = new Intent(Intent.ACTION_DIAL, telnumber);

    startActivity(call);

    }

    });

    Et en cas dinexistence .

    Dveloppement sous Android - Mlle TRIMECH R

    65

    Pour viter que lapplication crash si lactivit appele

    nexiste pas:

    Uri telnumber = Uri.parse("tel:0248484000");

    Intent call = new Intent(Intent.ACTION_DIAL, telnumber);

    if(call.resolveActivity(getPackageManager())!=null) {

    startActivity(call);

    }

    else {

    Toast.makeText(this,"activit introuvable",Toast.LENGTH_LONG).show();

    }

    Intent Filter

    Dveloppement sous Android - Mlle TRIMECH R

    66

    Un Intent Filter est une expressiondans le fichierAndroidManifest.xml dune application qui

    spcifie le type dintents quele composantveut recevoir.

    Permetaux autresactivits de lancerdirectement votre activit en utilisantun certainIntent.

    Si vous ne dclarez pas dIntent Filters votre activit, elle ne pourra tre dclenche que par

    un Intent Explicite.

    Il est recommand dene pasdclarer dIntent Filters pour lesservices, car cela peutcauser des

    problmes de scurit.

    67

    Passage de donnes entre lesPassage de donnes entre les

    activitsactivitsDeuxime

    Section

    Dveloppement sous Android - Mlle TRIMECH R

    ActivitA

    ExtrasActivit

    B

  • 7/25/2019 D Veloppement Sous Android Part3

    4/7

    Principe

    Dveloppement sous Android - Mlle TRIMECH R

    68

    putExtra envoi : au

    niveau delactivit A

    getExtra rcupration

    : au niveaude lactivitB

    Les Intentpermettent de transporter des informations destination de

    l'activit cible. On appelle ces informations des Extra:

    Les mthodes permettant de les manipuler sont :

    putExtra (envoi : au niveau de lactivit A)

    getExtra (rcupration : au niveau de lactivit B)

    Ajout dinformations (Activit A)

    Dveloppement sous Android - Mlle TRIMECH R

    69

    Lorsqu'on prpare un Intent(au niveau de Activit A) et que l'on souhaite

    ajouter une information de type "clef valeur" , on procde ainsi:

    Intent callactivity2= new Intent(getApplicationContext(),

    Activity2.class);

    callactivity2.putExtra("login", "admin");

    startActivity(callactivity2);

    Rcupration dinformations (Activit B)

    Dveloppement sous Android - Mlle TRIMECH R

    70

    Bundle extras = getIntent().getExtras();

    String s = new String(extras.getString("login"));

    Du ct de l'activit recevant l'Intent (au niveau de Activit B), on

    rcupre l'information de la manire suivante:

    71

    Lien bidirectionnel entre lesLien bidirectionnel entre les

    activitsactivitsTroisime

    Section

    Dveloppement sous Android - Mlle TRIMECH R

    Activit A

    Activit B

  • 7/25/2019 D Veloppement Sous Android Part3

    5/7

    Principe

    Dveloppement sous Android - Mlle TRIMECH R

    72

    Il est possible dtablir un lien bidirectionnel entre deux activits grce un Intent

    Pour recevoir un rsultat partir dune autre activit, appeler startActivityForResult

    au lieu de startActivity

    L activit destination doit tre conue pour renvoyer un rsultat une fois lopration

    sera ralise

    Le rsultat est envoy sous forme dIntent

    L activit principale le recevra dans la mthode onActivityResult

    Retour dune activit (1)

    Dveloppement sous Android - Mlle TRIMECH R

    73

    Lorsque le bouton retourest press, l'activit courante prend fin et

    revient l'activit prcdente. Cela permet par exemple de terminer

    son appel tlphonique et de revenir l'activit ayant initi l'appel.

    Au sein d'une application, une activit peut vouloir rcuprer un code

    de retour de l'activit "enfant". On utilise pour cela la mthode

    startActivityForResultqui envoie un code de retour l'activit enfant.

    Lorsque l'activit parent reprend la main, il devient possible de filtrer le

    code de retour dans la mthode onActivityResultpour savoir si l'on

    revient ou pas de l'activit enfant.

    Principe (2)

    Dveloppement sous Android - Mlle TRIMECH R

    74

    Activit A Activit B

    Mettre fin lactivit B avec la

    mthode finish().

    1. Enregistrer un code de retour avec la

    mthode setResult

    2. Filtrage du rsultat avec la mthode

    onActivityResult

    1. Appel de lintentavec la mthode

    startActivityForResult en prcisant un code

    denvoi

    Retour dune activit (Activit A)

    Dveloppement sous Android - Mlle TRIMECH R

    75

    L'appel d'un Intentdevient :

    public void onCreate(Bundle savedInstanceState) {

    ...

    Intent login = new Intent(getApplicationContext(),

    ActiviteB.class);

    startActivityForResult(login,48);

    ... }

    Le filtrage dans la classe parente (A) permet de savoir qui avait appel cette activit

    enfant (B):

    protected void onActivityResult(int requestCode, int resultCode,

    Intent data)

    {

    if (requestCode == 48)

    Toast.makeText(this, "Code de requte rcupr (je sais d'ou

    je viens)", Toast.LENGTH_LONG).show();

    }

  • 7/25/2019 D Veloppement Sous Android Part3

    6/7

    Rsultat dune activit (Activit B)

    Dveloppement sous Android - Mlle TRIMECH R

    76

    Il est possible de dfinir un rsultat d'activit, avant d'appeler explicitement la fin

    d'une activit avec la mthode finish(). Dans ce cas, la mthode setResultpermet

    d'enregistrer un code de retour qu'il sera aussi possible de filtrer dans l'activit

    parente.

    Dans l'activit enfant (Activit B), on met donc:

    Buttonfinish= (Button)findViewById(R.id.finish);

    finish.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

    setResult(50);

    finish();

    }});

    Rsultat dune activit (Activit A)

    Dveloppement sous Android - Mlle TRIMECH R

    77

    protected void onActivityResult(int requestCode, int resultCode, Intent

    data)

    {

    if (requestCode == 48)

    Toast.makeText(this, "Code de requte rcupr (je sais d'ou je

    viens)", Toast.LENGTH_LONG).show();

    if (resultCode == 50)

    Toast.makeText(this, "Code de retour ok (on m'a renvoy le bon

    code)", Toast.LENGTH_LONG).show();

    }

    Le filtrage dans la classe parente (A) permet de savoir :

    qui avait appel cette activit enfant (B) requestCode

    quavait retourn cette activit enfant (B) resultCode

    La classe parente (Activit A) peut filtrer ainsi :

    Application

    Dveloppement sous Android - Mlle TRIMECH R

    78

    79

    Remarques sur le fichier MANIFESTRemarques sur le fichier MANIFEST

    Quatrime

    Section

    Dveloppement sous Android - Mlle TRIMECH R

    Activits Permissions

  • 7/25/2019 D Veloppement Sous Android Part3

    7/7

    Activits

    Dveloppement sous Android - Mlle TRIMECH R

    80

    Si lapplication est forme par plusieurs activits, NE

    PAS OUBLIER DE DCLARER LES ACTIVITS

    DANS LE MANIFEST

    Permissions (1)

    Dveloppement sous Android - Mlle TRIMECH R

    81

    Une activit ne peut accder certaines ressources matrielles quavec une

    permission qui doit apparatre dans le Manifest

    Elles concernent :

    La golocalisation (GPS)

    Les accs aux contacts et l'agenda du tlphone

    Les modifications de paramtres (orientation, fond dcran )

    Les appels tlphoniques

    Lenvoi et rception de SMS/MMS

    Laudio

    Le rseau (dont laccs Internet)

    Le matriel (bluetooth, appareil photo, )

    Permissions (2)

    Dveloppement sous Android - Mlle TRIMECH R

    82

    ATTENTION : Loubli de permissions provoquera une erreurdexcution

    .