Développement d’applications Mobiles
DJOUABRI Abderrezak
[Link]
djouabri@[Link]
Université Mohand Oulhadj de Bouira
CHAPITRE 01
Intent
DJOUABRI Abderrezak
[Link]
djouabri@[Link]
Université Mohand Oulhadj de Bouira
3
les Intents forment un
mécanisme sophistiqué et
complet permettant aux activités
et aux applications d'interagir
entre elles.
4
structure de données passive contenant une
description abstraite d'une action à effectuer.
Il peut être utilisé avec
startActivity
pour lancer
broadcastIntent pour une activité
l'envoyer à tout composant
BroadcastReceiver intéressé
startService (Intent) ou bindService
(Intent, ServiceConnection, int).
5
Intent Structure
The primary pieces of information in an intent are:
▪ action -- The general action to be performed, such as
ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, etc.
▪ data -- The data to operate on, such as a person record in
the contacts database, expressed as a Uri.
Some examples of action/data pairs are:
6
Intent Structure
7
category
In addition to these primary attributes, there are a number
of secondary attributes that you can also include with an
intent:
category –
Donne des informations supplémentaires sur l'action à exécuter.
Par exemple, CATEGORY_LAUNCHER signifie qu'il doit apparaître dans le
lanceur en tant qu'application de niveau supérieur, alors que
CATEGORY_ALTERNATIVE signifie qu'il doit être inclus dans une liste d'actions
alternatives que l'utilisateur peut effectuer sur une donnée.
8
type
type –
Spécifie un type explicite (un type MIME) des données
d'intention. Normalement, le type est déduit des données
elles-mêmes. En définissant cet attribut, vous désactivez cette
évaluation et forcez un type explicite.
9
component
component –
Spécifie un nom explicite d'une classe de composant à utiliser pour
l'intention. Normalement, ceci est déterminé en regardant les
autres informations dans l'intention (l'action, les données / le type
et les catégories) et en faisant correspondre cela avec un
composant qui peut le gérer. Si cet attribut est défini, aucune
évaluation n'est effectuée et ce composant est utilisé exactement
tel quel. En spécifiant cet attribut, tous les autres attributs Intent
deviennent facultatifs.
10
extras
extras –
Ceci est un ensemble de toute information supplémentaire. Cela
peut être utilisé pour fournir des informations étendues au
composant.
Par exemple, si nous avons une action pour envoyer un message
électronique, nous pourrions également inclure des données
supplémentaires ici pour fournir un sujet, un corps, etc.
11
quelques exemples d'autres opérations
Voici quelques exemples d'autres opérations que vous pouvez spécifier en tant
qu'ententes en utilisant ces paramètres supplémentaires:
ACTION_MAIN avec la catégorie CATEGORY_HOME - Lancez l'écran d'accueil.
ACTION_GET_CONTENT avec le type MIME [Link] / phone -
Affiche la liste des numéros de téléphone des personnes, permettant à l'utilisateur
de les parcourir et d'en choisir une et de la renvoyer à l'activité parente.
ACTION_GET_CONTENT avec le type MIME * / * et la catégorie
CATEGORY_OPENABLE - Affiche tous les sélecteurs pour les données qui peuvent
être ouvertes avec [Link] (), permettant à l'utilisateur
de choisir l'un d'entre eux, puis certaines données à l'intérieur et renvoyant l'URI
résultant à votre interlocuteur. Cela peut être utilisé,
par exemple, dans une application de messagerie pour permettre à l'utilisateur de
sélectionner certaines données à inclure en pièce jointe.
12
Intent Resolution
There are two primary forms of intents you will use.
Les intentions implicites
Les intentions explicites n'ont pas spécifié de
ont spécifié un composant (via composant; à la place, ils
setComponent (ComponentName) ou doivent inclure suffisamment
setClass (Context, Class)), qui fournit la d'informations pour que le
classe exacte à exécuter. Souvent, ceux-ci système détermine lequel des
n'incluront aucune autre information, composants disponibles est le
étant simplement un moyen pour une mieux adapté à cette
application de lancer diverses activités intention.
internes au fur et à mesure que
l'utilisateur interagit avec l'application.
13
LA CLASSE INTENT : CONSTRUCTEUR
14 DÉCLARATION D'UNE ACTIVITÉ DANS [Link]
L'activité principale :
15 DÉCLARATION D'UNE ACTIVITÉ DANS [Link]
L'activité secondaire (enfant) ou sous-activité :
Résultat en XML
16 DÉCLARATION D'UNE ACTIVITÉ DANS [Link]
17
DÉMARRER UNE SOUS-ACTIVITÉ
Cas 1
18
DÉMARRER UNE SOUS-ACTIVITÉ
Cas 1 L'activité principale : MyActivity
19
DÉMARRER UNE SOUS-ACTIVITÉ
Cas 1 L'activité principale : MyActivity
20
DÉMARRER UNE SOUS-ACTIVITÉ
Cas 1 L'activité secondaire : MySubActivity
21
DÉMARRER UNE SOUS-ACTIVITÉ
Cas 1 L'activité secondaire : MySubActivity
22
DÉMARRER UNE SOUS-ACTIVITÉ
23
LA MÉTHODE ONACTIVITYRESULT
24
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
25
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
26
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
27
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
28
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
29
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
30
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
31
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1
32
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
33
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
34
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
35
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
36
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
37
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
38
DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2
39
DÉMARRER UNE SOUS-ACTIVITÉ : CAS 3
40
Envoyer DES DONNÉES PAR Bundle
41
Envoyer DES DONNÉES PAR Bundle
42
Envoyer DES DONNÉES PAR INTENT
43
Envoyer DES DONNÉES PAR INTENT
44
Récupérer DES DONNÉES PAR Bundle
45
Récupérer DES DONNÉES PAR
Intent
46 LES DONNÉES DANS L'ACTIVITÉ SECONDAIRE
47
SOLLICITER D'AUTRES APPLICATIONS
48 DÉLÉGUER AU SYSTÈME LE CHOIX DE L'APPLICATION
49 DÉLÉGUER AU SYSTÈME LE CHOIX DE L'APPLICATION
50
LES URIS (UNIFORM RESSOURCE IDENTIFIER)
51
LES ACTIONS NATIVES
52
LES ACTIONS NATIVES
53
EXEMPLE 1 :
Démarrer un navigateur internet
private void doWebBrowser() {
Uri uri = [Link]("[Link] djouabri,com/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
54
EXEMPLE 2 :
Lancer l'Android Market
private void doMarket(){
Uri uri = [Link]( "market://search?q=pub:\« muhamed\");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
} 55
55
EXEMPLE 2 :
Lancer l'Android Market
private void doMarket(){
Uri uri = [Link]( "market://search?q=pub:\« muhamed\");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
} 55
56 ACCORDER LES PERMISSIONS LIÉES AUX ACTIONS
57 ACCORDER LES PERMISSIONS LIÉES AUX ACTIONS
58
FILTRER LES ACTIONS
59
FILTRER LES ACTIONS
60
Request App Permissions
Chaque application Android s'exécute dans un
sandbox à accès limité. Si une application doit
utiliser des ressources ou des informations en
dehors de son propre sandbox, l'application
doit demander l'autorisation appropriée. Vous
déclarez que votre application a besoin d'une
autorisation en répertoriant les autorisations
dans le manifeste de l'application, puis en
demandant à l'utilisateur d'approuver chaque
autorisation au moment de l'exécution (sur
Android 6.0 ou version ultérieure).
61
Add permissions to the manifest
62
Add permissions to the manifest
Le comportement du système après la
déclaration d'une autorisation dépend de la
sensibilité de l'autorisation.
Normal permissions dangerous permissions
le système les accorde L'utilisateur doit donc accorder
immédiatement lors de explicitement l'accès à votre
l'installation. application.
63
Normal permissions
Les autorisations normales couvrent les zones dans lesquelles votre
application doit accéder à des données ou des ressources en dehors
du sandbox de l'application, mais où les risques pour la vie privée
de l'utilisateur ou le fonctionnement des autres applications sont
très limités. Par exemple, l'autorisation de définir le fuseau horaire
est une autorisation normale.
Si une application déclare dans son manifeste qu'elle a besoin d'une
autorisation normale, le système accorde automatiquement cette
autorisation à l'application au moment de l'installation. Le système
n'invite pas l'utilisateur à accorder des autorisations normales et les
utilisateurs ne peuvent pas révoquer ces autorisations.
64
Normal permissions
•ACCESS_LOCATION_EXTRA_COMMA •MODIFY_AUDIO_SETTINGS
•NFC
NDS •READ_SYNC_SETTINGS
•ACCESS_NETWORK_STATE •READ_SYNC_STATS
•ACCESS_NOTIFICATION_POLICY •RECEIVE_BOOT_COMPLETED
•ACCESS_WIFI_STATE •REORDER_TASKS
•REQUEST_COMPANION_RUN_IN_BACKGROUN
•BLUETOOTH D
•BLUETOOTH_ADMIN •REQUEST_COMPANION_USE_DATA_IN_BACKG
•BROADCAST_STICKY ROUND
•CHANGE_NETWORK_STATE •REQUEST_DELETE_PACKAGES
•REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
•CHANGE_WIFI_MULTICAST_STATE •REQUEST_INSTALL_PACKAGES
•CHANGE_WIFI_STATE •SET_ALARM
•DISABLE_KEYGUARD •SET_TIME_ZONE
•EXPAND_STATUS_BAR •SET_WALLPAPER
•SET_WALLPAPER_HINTS
•GET_PACKAGE_SIZE •TRANSMIT_IR
•INSTALL_SHORTCUT •UNINSTALL_SHORTCUT
•INTERNET •USE_FINGERPRINT
•KILL_BACKGROUND_PROCESSES •VIBRATE
•WAKE_LOCK
•MANAGE_OWN_CALLS •WRITE_SYNC_SETTINGS
65
Normal permissions
Install-time requests (Android 5.1.1 and below)
66
Dangerous permissions
Les autorisations dangereuses couvrent des domaines dans
lesquels l'application souhaite disposer de données ou de
ressources qui impliquent des informations privées de
l'utilisateur, ou qui pourraient potentiellement affecter les
données stockées de l'utilisateur ou le fonctionnement d'autres
applications.
Par exemple, la possibilité de lire les contacts de l'utilisateur est
une autorisation dangereuse. Si une application déclare qu'elle a
besoin d'une autorisation dangereuse, l'utilisateur doit accorder
explicitement l'autorisation à l'application.
Pour utiliser une autorisation dangereuse, votre application doit
inviter l'utilisateur à accorder l'autorisation à l'exécution.
67
Dangerous permissions
Permission Group Permissions
•READ_PHONE_STATE
•READ_PHONE_NUMBERS
•CALL_PHONE
Permission Group Permissions •ANSWER_PHONE_CALLS (must
•READ_CALENDAR request at runtime)
CALENDAR •READ_CALL_LOG
•WRITE_CALENDAR PHONE
•WRITE_CALL_LOG
CAMERA •CAMERA •ADD_VOICEMAIL
•READ_CONTACTS •USE_SIP
CONTACTS •WRITE_CONTACTS •PROCESS_OUTGOING_CALLS
•ANSWER_PHONE_CALLS
•GET_ACCOUNTS •READ_PHONE_NUMBERS
•ACCESS_FINE_LOCATION SENSORS •BODY_SENSORS
LOCATION
•ACCESS_COARSE_LOCATION •SEND_SMS
MICROPHONE •RECORD_AUDIO •RECEIVE_SMS
SMS •READ_SMS
•RECEIVE_WAP_PUSH
•RECEIVE_MMS
•READ_EXTERNAL_STORAGE
STORAGE
•WRITE_EXTERNAL_STORAGE
Permission groups
68
Dangerous permissions
Les autorisations sont organisées en groupes liés aux
fonctionnalités ou périphériques. Sous ce système, les
demandes d'autorisation sont gérées au niveau du groupe et un
seul groupe d'autorisations correspond à plusieurs déclarations
d'autorisations dans le manifeste de l'application.
Par exemple, le groupe SMS inclut à la fois les déclarations
READ_SMS et RECEIVE_SMS. Le regroupement des autorisations
de cette manière permet à l'utilisateur de faire des choix plus
significatifs et informés, sans être submergé par des demandes
d'autorisation complexes et techniques.
Permission groups
69
Dangerous permissions
70
Dangerous permissions
lorsque votre application demande une autorisation
dangereusesous Android 6.0 (API 23), :
1 Si l'application ne dispose actuellement d'aucune autorisation
dans le groupe d'autorisations, le système affiche la boîte de
dialogue de demande d'autorisation pour l'utilisateur décrivant
le groupe d'autorisations auquel l'application souhaite accéder.
La boîte de dialogue ne décrit pas l'autorisation spécifique au
sein de ce groupe.
Par exemple, si une application demande l'autorisation
READ_CONTACTS, la boîte de dialogue du système indique
simplement que l'application doit avoir accès aux contacts du
périphérique. Si l'utilisateur accorde l'approbation, le système
donne à l'application uniquement l'autorisation demandée.
71
Request prompts for dangerous permissions
Runtime requests (Android 6.0 and higher)
1
72
Dangerous permissions
Si l'application a déjà reçu une autre autorisation
1 dangereuse dans le même groupe d'autorisations, le
système accorde immédiatement l'autorisation sans aucune
interaction avec l'utilisateur.
Par exemple, si une application a précédemment demandé
et obtenu l'autorisation READ_CONTACTS et qu'elle
demande ensuite WRITE_CONTACTS, le système accorde
immédiatement cette autorisation sans afficher la boîte de
dialogue d'autorisations à l'utilisateur.
73
Caution
Attention: Les futures versions du SDK Android peuvent
déplacer une autorisation particulière d'un groupe à un autre.
Par conséquent, ne basez pas la logique de votre application
sur la structure de ces groupes d'autorisations.
Par exemple, READ_CONTACTS se trouve dans le même groupe
d'autorisations que WRITE_CONTACTS à partir d'Android 8.1
(niveau d'API 27). Si votre application demande l'autorisation
READ_CONTACTS, puis demande l'autorisation
WRITE_CONTACTS, ne supposez pas que le système peut
accorder automatiquement l'autorisation WRITE_CONTACTS.
74
Check for permissions
Pour vérifier si vous avez une autorisation, appelez
la méthode [Link] ().
PERMISSION_DENIED
PERMISSION_GRANTED
l'application doit
l'application peut poursuivre explicitement demander
l'opération l'autorisation à l'utilisateur.
75
76
77
Permissions for optional hardware features
L'accès à certaines fonctions matérielles (telles que Bluetooth ou
l'appareil photo) nécessite une autorisation d'application.
Cependant, tous les appareils Android ne possèdent pas ces
fonctionnalités matérielles.
Donc, si votre application demande l'autorisation CAMERA, il est
important que vous incluiez également la balise
<uses-feature> dans votre manifeste pour déclarer si cette
fonctionnalité est réellement requise ou non.
Par exemple:
Vous devez vérifier si le périphérique en cours possède la
fonctionnalité au moment de l'exécution en appelant
[Link] () et désactiver cette
fonctionnalité si elle n'est pas disponible.
78
Special permissions
SYSTEM_ALERT_WINDOW et WRITE_SETTINGS sont
particulièrement sensibles, donc la plupart des applications ne
devraient pas les utiliser.
Si une application a besoin d'une de ces autorisations, elle doit
déclarer l'autorisation dans le manifeste et envoyer une
intention demandant l'autorisation de l'utilisateur. Le système
répond à l'intention en affichant un écran de gestion détaillé à
l'utilisateur.
79
Permission enforcement
▪ Les autorisations ne sont pas seulement pour demander
la fonctionnalité du système.
▪ Les services fournis par les applications peuvent appliquer
des autorisations personnalisées pour restreindre les
utilisateurs autorisés à les utiliser.
URI permissions
Activity permission enforcement
Broadcast permission enforcement
Service permission enforcement
Content Provider permission enforcement
80