77
PROGRAMMATION ANDROID Ahcène Bounceur Université de Bretagne Occidentale 1

PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

PROGRAMMATION ANDROID

Ahcène Bounceur

Université de Bretagne Occidentale

1

Page 2: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Création d'applications et les Activités2

Chapitre 2

Page 3: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Ce chapitre vous présentera les différents composants d'une application Android et leurs

interactions.

3

Page 4: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

APPLICATION ANDROID

¢ Une application Android est un assemblage de

composants liés grâce à un fichier de configuration.

� Les Activités à Classe Java

� Les Vues et contrôlesà Fichiers XML ou code Java

� Les Ressources à Interfaces (Layout), Images, Textes, audio, vidéo, …

� Le fichier de configurationà AndroidManifest.xml

4

Page 5: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Application

Création d'applications Android (concepts)

Activité au premier plan

Vues qui composent l'activité

(ImageView, TextView, etc.)

Ressources

Traductions texte, couleurs, images,

vidéos, etc.Fichier de configuration

(manifest)

Détient la composition de l'application

(activités, permissions, mécanismes liés aux

intentions)5

Page 6: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

LES PIÈCES D'UNE APPLICATION ANDROID

6

Composants applicatifs

Eléments d’intéraction

¢ Une application Android est composée de plusieurs éléments qu'il faut assembler pour obtenir un tout cohérent. Plus une application est complexe, plus le nombre de pièces utilisées sera grand. Voici donc les différents pièces principales de l'Android :

� Activités� Services� Fournisseurs de contenu� Gadgets

� Objets Intent� Récepteurs d'Intents� Notifications� Filtres d’Intent

Page 7: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

COMPOSANTS APPLICATIFS

¢ Activité (android.app.Activity)� représente le bloc de base d'une application.

¢ Service (android.app.Service)� est un composant qui fonctionne en tâche de fond, de manière

invisible. Ses principales utilisations sont la mise à jour de sources de données ainsi que d'activités visibles et le déclenchement de notifications.

¢ Fournisseur de contenu (content provider) (android.content.ContentProvider)� permet de gérer et de partager des informations.

¢ Gadget (Android.appwidget.*)� est un composant graphique qui s'installe sur le bureau

Android. 7

Page 8: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ELÉMENTS D'INTERACTION

¢ Intents (android.content.Intent)� il permet de diffuser des messages en demandant la réalisation

d'une action.¢ Récepteurs (android.content.BroadcastReceiver)

� il permet à une application d'être à l'écoute des autres afin de répondre aux objets Intent qui lui sont destinés et qui sont envoyés par d'autres composants applicatifs.

¢ Notifications (android.app.Notification)� une notification signale une information à l'utilisateur sans

interrompre ses actions en cours.

8

Page 9: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ELÉMENTS D'INTERACTION

¢ Filtres (d'Intents) : un objet Intent peut mentionner explicitement un composant cible. Si cette information n'est pas renseignée, Android doit choisir le meilleur composant pour y répondre. Ceci est mené à bien via une comparaison de l'objet Intent avec les filtres des différentes applications cibles. Les filtres ne se manipulent généralement pas via l'API mais sont paramétrables grâce à la balise <intent-filter> du fichier de configuration.

9

Page 10: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ

¢ Une activité peut être assimilée à un écran qu'une application propose à son utilisateur.

¢ Chaque écran d'une application correspond à une activité

¢ Une activité est composée de deux volets : � la logique de l'activité et la gestion du cycle de vie de

l'activité qui sont implémentés en Java dans une classe héritant de Activity,

� l'interface utilisateur, qui pourra être définie soit dans le code de l'activité soit de façon plus générale dans un fichier XML placé dans les ressources de l'application.

10

Page 11: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ

11

Context

ContextWrapper

Service

ContextThemeWrapper

Activity

Page 12: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ

12

import android.app.Activity;import android.os.Bundle;

public class ActiviteSimple extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

}}

Page 13: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ

13

Context

ContextWrapper

Service

ContextThemeWrapper

Activity

SupportActivity

BaseFragmentActivityApi14

BaseFragmentActivityJB

FragmentActivity

AppCompatActivity

Page 14: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ (AppCompatActivity)

14

import android.app.Activity;import android.os.Bundle;

public class ActiviteSimple extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

}}

Page 15: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ (Plein écran)

15

import android.app.Activity;import android.os.Bundle;

public class ActiviteSimple extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

}}

Page 16: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

import android.app.Activity;import android.os.Bundle;

public class ActiviteSimple extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getSupportActionBar().hide();

}}

ACTIVITÉ (Sans barre d’action)

16

Page 17: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

import android.app.Activity;import android.os.Bundle;

public class ActiviteSimple extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getSupportActionBar().hide();getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

}}

ACTIVITÉ (Plein écran et Sans barre d’action)

17

Page 18: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CRÉER UNE ACTIVITÉ

¢ Méthode 1 :

18

Page 19: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CRÉER UNE ACTIVITÉ

¢ Méthode 1 :

19

Page 20: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CRÉER UNE ACTIVITÉ

¢ Méthode 2 :� Créer une classe Java classique� Cette classe doit hériter de la classe Activity� Ajouter la méthode onCreate(Bundle savedInstanceState) � Au début de cette méthode, appeler la méthode onCreate de

la classe mère� Ajouter l’interface graphique

20

public class MonActivite extends Activity {public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

}}

Page 21: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CRÉER UNE ACTIVITÉ

¢ Méthode 2 :� Une activité doit être déclarée dans le fichier de configuration : AndroidManifest.xml

� Un Intent-Filter doit être ajouté afin de pouvoir ajouter¢ Une Action (principale ou secondaire)¢ Une Catégorie (se lance automatiquement ou pas)

21

<activity android:name=".MainActivity"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

<activity android:name=".Main2Activity"></activity>

Page 22: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CRÉER UNE ACTIVITÉ

¢ Méthode 2 :� Une activité doit être déclarée dans le fichier de configuration : AndroidManifest.xml

� Un Intent-Filter doit être ajouté afin de pouvoir ajouter¢ Une Action (principale ou secondaire)¢ Une Catégorie (se lance automatiquement ou pas)

22

<activity android:name=".MainActivity"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

<activity android:name=".Main2Activity"></activity>

Page 23: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

23

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.bounceur.cours_android">

<application

android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activity android:name=".MainActivity"

><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

Page 24: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

24

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.bounceur.cours_android">

<application

android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activity android:name=".MainActivity"android:process="nom"

><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

Page 25: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

25

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.bounceur.cours_android">

<application

android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activity android:name=".MainActivity"android:process="nom"android:permission="android.permission.WAKE_LOCK"

><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

Page 26: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="fr.univ_brest.bounceur.projet_cours">

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activity android:name=".MainActivity"android:theme="@style/Theme.Design.NoActionBar"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

26

Page 27: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="fr.univ_brest.bounceur.projet_cours">

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activity android:name=".MainActivity"android:theme="@style/Theme.Design.Light.NoActionBar"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

27

Page 28: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="fr.univ_brest.bounceur.projet_cours">

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">

<activityandroid:name=".MainActivity"

android:screenOrientation="portrait"

><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

28

portraitlandscape…

Page 29: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

¢ Priorité d’une activité :

<activityandroid:name=".MainActivity"android:label="Mon Activité">

<intent-filter android:priority="999">

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</application>

29

-1000 à 1000

Page 30: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ACTIVITÉ : AndroidManifest.xml

¢ Label et Mode d’exécution :

<activityandroid:name=".MainActivity"android:label="Mon Activité"android:launchMode="singleTask"

>

30

singleTaskstandard singleTop singleInstance

Page 31: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CYCLE DE VIE D'UNE ACTIVITÉ

¢ Les états principaux d'une activité sont les suivants : � active (active) : activité visible qui détient le focus

utilisateur et attend les entrées utilisateur. C'est l'appel à la méthode onResume, à la création ou à la reprise après pause qui permet à l'activité d'être dans cet état. Elle est ensuite mise en pause quand une autre activité devient active grâce à la méthode onPause ;

� suspendue (paused) : activité au moins en partie visible à l'écran mais qui ne détient pas le focus. La méthode onPause est invoquée pour entrer dans cet état et les méthodes onResume ou onStop permettent d'en sortir ;

� arrêtée (stopped) : activité non visible. C'est la méthode onStop qui conduit à cet état.

31

Page 32: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

CYCLE DE VIE D'UNE ACTIVITÉ

¢ Le cycle de vie d'une activité est parsemé d'appels aux méthodes relatives à chaque étape de sa vie. Il informe ainsi le développeur sur la suite des événements et le travail qu'il doit accomplir.

32Source : www.android.com

Page 33: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (1/9)

public final class MonActivite extends Activity {/** * Appelée lorsque l'activité est créée. * Permet de restaurer l'état de l'interface * utilisateur grâce au paramètre savedInstanceState. */

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Placez votre code ici

}...

}

33

Page 34: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (2/9)

public final class MonActivite extends Activity {...

/** * Appelée lorsque que l'activité a fini son cycle de vie. * C'est ici que nous placerons notre code de libération de * mémoire, fermeture de fichiers et autres opérations * de "nettoyage". */public void onDestroy() {

// Placez votre code icisuper.onDestroy();

}...}

34

Page 35: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (3/9)

public final class MonActivite extends Activity {...

/** * Appelée lorsque l'activité démarre. * Permet d'initialiser les contrôles. */

public void onStart() {super.onStart();// Placez votre code ici

}...}

35

Page 36: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (4/9)

public final class MonActivite extends Activity {...

/** * Appelée lorsque l'activité passe en arrière plan. * Libérez les écouteurs, arrêtez les threads, votre activité* peut disparaître de la mémoire. */

public void onStop() {// Placez votre code icisuper.onStop();

}...}

36

Page 37: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (5/9)

public final class MonActivite extends Activity {...

/** * Appelée lorsque l'activité sort de son état de veille.*/

public void onRestart() {super.onRestart();// Placez votre code ici

}...}

37

Page 38: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (6/9)

public final class MonActivite extends Activity {...

/** * Appelée lorsque que l'activité est suspendue. * Stoppez les actions qui consomment des ressources. * L'activité va passer en arrière-plan. */

public void onPause() {// Placez votre code icisuper.onPause();

}...}

38

Page 39: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Activité : squelette (7/9)

public final class MonActivite extends Activity {...

/** * Appelée après le démarrage ou une pause. * Relancez les opérations arrêtées (threads). * Mettez à jour votre application et vérifiez vos écouteurs. */

public void onResume() {super.onResume();// Placez votre code ici

}...}

39

Page 40: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

ME S S A G E S & DIA L O G U E

Toast et SnackBar / AlertDialog40

Page 41: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN M ESSAGE

¢ Par un Toast

Toast.makeText(this, "Salut !", Toast.LENGTH_SHORT).show();

Toast.makeText(this, "Salut !", Toast.LENGTH_LONG).show();

41

Page 42: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN M ESSAGE

¢ Par un SnackBar

Snackbar snackbar = Snackbar.make(findViewById(R.id.layout), "Welcome !", Snackbar.LENGTH_LONG);

snackbar.show();

Ou

Snackbar.make(findViewById(R.id.layout), "Welcome !", Snackbar.LENGTH_LONG).show();

42

Page 43: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UN MESSAGE

¢ Par un SnackBar + Action

View layout = findViewById(R.id.layout);

Snackbar snackbar = Snackbar.make(layout, "Message", Snackbar.LENGTH_LONG) ;

snackbar.setAction("CLOSE", new View.OnClickListener() {@Overridepublic void onClick(View view) {

//...}

});

snackbar.show();

43

Page 44: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN M ESSAGE

¢ Par un SnackBar + Action + Couleur

View layout = findViewById(R.id.layout);

Snackbar snackbar = Snackbar.make(layout, "Message", Snackbar.LENGTH_LONG) ;

snackbar.setAction("CLOSE", new View.OnClickListener() {@Overridepublic void onClick(View view) {

//...}

});

snackbar.setActionTextColor(Color.RED)

View sbView = snackbar.getView();

sbView.setBackgroundColor(Color.TRANSPARENT);

snackbar.show();44

Page 45: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Information");builder.setMessage("Value of x is "+x);builder.setIcon(R.drawable.triangle);builder.show();

45

Informer

Page 46: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Information");

builder.setMessage("Voulez-vous quitter ?");

builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour oui}

});builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour non}

});builder.setNeutralButton("Annuler", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour annuler (dialog.cancel();) }

});AlertDialog dialog = builder.create();dialog.show();

46Confirmer

Page 47: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Information");

builder.setMessage("Voulez-vous quitter ?");

builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour oui}

});builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour non}

});builder.setNeutralButton("Annuler", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

// Action pour annuler (dialog.cancel();) }

});builder.show();

47Confirmer

Page 48: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Valeur de x");

final EditText input = new EditText(this);input.setInputType(InputType.TYPE_CLASS_TEXT);builder.setView(input);

builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {

String s = input.getText().toString();}

});builder.setNeutralButton("Annuler", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

dialog.cancel();}

});builder.show();

48Entrée (Input)

Page 49: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

DatePickerDialog dpd = new DatePickerDialog(this);

dpd.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker dp, int y, int m, int d) {

Log.i("TAG", d+" "+m+" "+y);}

});

dpd.show();

y : Annéem : Moisd : Jour

49

Choisir une date

Page 50: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

TimePickerDialog tpd = new TimePickerDialog(this,

new TimePickerDialog.OnTimeSetListener() {

@Override

public void onTimeSet(TimePicker view, int h, int m) {

Log.i("TAG", h+" "+m);

}

}, 15, 0, true);

tpd.show();

h : Heure

m : Minutes

50

Choisir une heure

Page 51: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Choisissez un sandwich").setItems(R.array.sandwichs,

new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {

Log.i("TAG", ""+which);}

});builder.create().show();

51

Choix unique

Page 52: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Ingrédients").setMultiChoiceItems(R.array.ingredients, null,

new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {

Log.i("TAG", ""+which+" "+isChecked);}

});builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int id) {}

});builder.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int id) {}

});builder.create().show();

52

Choix multiple

Page 53: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

53

Boite personnelle

MainActivityactivity_main.xml

onClick

textView

mon_dialog_layout.xmleditText

Layout (sans les boutons)

Page 54: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);LayoutInflater inflater = this.getLayoutInflater();

View view = inflater.inflate(R.layout.mon_dialog_layout, null);EditText editText = view.findViewById(R.id.editText);builder.setView(view);

builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int id) {

textView.setText(editText.getText().toString());}

});

builder.setNegativeButton("Annuler", ...);

builder.create().show();

54

Boite personnelle

Page 55: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICHER UNE BO ITE DE D IALOGUE

AlertDialog.Builder builder = new AlertDialog.Builder(this);

LayoutInflater inflater = this.getLayoutInflater();

builder.setView(inflater.inflate(R.layout.mon_dialog_layout, null)) ;builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, int id) {

Dialog dialogObj = (Dialog) dialog;EditText editText = dialogObj.findViewById(R.id.editText);textView.setText(editText.getText().toString());

}})builder.setNegativeButton ...

builder.create().show();

55

Boite personnelle

Page 56: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

LES NOT IF IC AT ION S

56

Page 57: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

mBuilder.setSmallIcon(R.drawable.notif_icone);mBuilder.setContentTitle("Ma notification");mBuilder.setContentText("Salut!");

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, mBuilder.build());

57

id

Page 58: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

mBuilder.setSmallIcon(R.drawable.notif_icone);mBuilder.setContentTitle("Ma notification");mBuilder.setContentText("Salut!");

Notification notification = mBuilder.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

58

Page 59: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

mBuilder.setSmallIcon(R.drawable.notif_icone).setContentTitle("Ma notification").setContentText("Salut!") ;

Notification notification = mBuilder.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

59

Page 60: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

60

La notification ne disparaît pas Pour arrêter une notification, utiliser mNotificationManager.cancel(id)false (par défaut) à elle disparaît (par l’intermédiaire de l’utilisateur)

Page 61: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UNE NOTIFICATION

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.setOngoing(true)

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

61

Page 62: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER PLUS IEURS NOT IF IC AT ION S

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.setOngoing(true)

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);mNotificationManager.notify(1, notification);mNotificationManager.notify(1, notification);

62

Page 63: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER PLUS IEURS NOT IF IC AT ION S

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.setOngoing(true)

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);mNotificationManager.notify(2, notification);mNotificationManager.notify(3, notification);

63

Page 64: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION (AVEC DU SON )

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.setSound(soundUri)

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

64

Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

Page 65: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION (AVEC SON )

Son du réveil :RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)

Son de notification :RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

Son de sonnerie téléphone :RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);

Son existant et adapté :RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALL);

Son personnalisé :Uri soundUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bipe);

65

Uri soundUri = RingtoneManager.getDefaultUri(?);

Page 66: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF ICH ER UN E NOT IF IC AT ION (QU I V IBRE )

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.notif_icone)

.setContentTitle("Ma notification")

.setContentText("Salut!")

.setSound(soundUri);

.setVibrate(new long[]{0, 1000, 500, 1000});

.build();

NotificationManager mNotificationManager = (NotificationManager) getSystemService(this.NOTIFICATION_SERVICE);

mNotificationManager.notify(1, notification);

66

Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

0 : Ne pas répéter1000 : vibrer durant 1 seconde500 : attendre ½ seconde1000 : vibrer durant 1 secondexxx : vibreryyy : attendre...

Page 67: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UNE NOTIF ICAT IONVERS ION À PARTIR D ’OREO

Création d’un canal :

NotificationChannel channel = new NotificationChannel(

"channelid", "Royal", NotificationManager.IMPORTANCE_DEFAULT);

channel.setDescription("Description");

67

>Android 8minSdkVersion 26

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {...

}

Page 68: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UNE NOTIF ICAT IONVERS ION À PARTIR D ’OREO

Création d’un canal (son personnalisé) :

Uri soundUri = ...

AudioAttributes audioAttributes = new AudioAttributes.Builder()

.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)

.setUsage(AudioAttributes.USAGE_ALARM)

.build();

channel.setSound(soundUri , audioAttributes);

68

Page 69: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UNE NOTIF ICAT IONVERS ION À PARTIR D ’OREO

Création de la notification :

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channelid")

.setSmallIcon(R.drawable.ic_notif)

.setContentTitle("Important !")

.setContentText("Votre colis est arrivé")

.setPriority(NotificationCompat.PRIORITY_DEFAULT);

69

Page 70: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFFICHER UNE NOTIF ICAT IONVERS ION À PARTIR D ’OREO

Lancement de la notification :

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

notificationManager.createNotificationChannel(channel);

notificationManager.notify(1, builder.build());

70

Page 71: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

AFF IC H E R U N E NO TIF IC A T IO NVE R S IO N À P A R T IR D ’OR E O (LE S O N !)

71

Page 72: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

RING TON EUri soundUri = ...

Ringtone ringtone =RingtoneManager.getRingtone(getApplicationContext(), soundUri);

ringtone.play();

72

Page 73: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

LUM INOS ITÉ D E L ’ÉCRANWindowManager.LayoutParams param = getWindow().getAttributes();

param.screenBrightness = 0.5f ;

getWindow().setAttributes(param);

param.screenBrightness

Type floatà Minimum : 0.0fà Maxmimum : 1.0f

73

Page 74: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

Forcer l’écran à rester allumé (bloquer le mode veille)

¢ Il suffit juste d’ajouter un flag :

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

);

¢ On peut le faire aussi à partir d’un layout :

<android.support.constraint.ConstraintLayout xmlns:android="http..." xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:keepScreenOn="true"tools:context="com.bounceur.servicelooper.MainActivity"

>

74

Page 75: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

75

android.os.Process.killProcess(android.os.Process.myPid());

Page 76: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

76

Page 77: PROGRAMMATION ANDROID - univ-brest.frlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/...services, les récepteurs d'Intents (Broadcast receivers), les fournisseurs de contenu et

VO IX D E SYN TH ÈSE

https://ttsreader.com/fr/

77