web-dev-qa-db-fra.com

Intentions implicites Android et intentions explicites

En travaillant avec Android, je me suis rendu compte que les intentions implicites constituaient un bon choix dans la plupart des cas, en raison de leur flexibilité. Mais qu'en est-il des intentions explicites? Quels sont les avantages de les utiliser? Quels sont les cas courants lorsqu'il est recommandé de les utiliser?

53

Les intentions implicites ne spécifient pas directement les composants Android qui doivent être appelés, elles spécifient uniquement les actions à exécuter. Un Uri peut être utilisé avec l'intention implicite de spécifier le type de données.

par exemple

Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));

cela entraînera le navigateur Web pour ouvrir une page Web. Android le système recherche tous les composants enregistrés pour l'action spécifique et le type de données.Si de nombreux composants sont trouvés, l'utilisateur peut sélectionner le composant à utiliser ..

Les intentions explicites sont utilisées dans l'application même, dans laquelle une activité peut basculer vers une autre activité ... Exemple Intent intent = new Intent(this,Target.class);: cette opération entraîne le basculement de l'activité du contexte actuel vers l'activité cible. Les intentions explicites peuvent également être utilisées pour transmettre des données à une autre activité à l'aide de la méthode putExtra et extraites par activité cible à l'aide des méthodes getIntent().getExtras().

J'espère que cela a aidé.

118
Aditya Kamath

Vous utilisez généralement des intentions explicites pour démarrer des activités au sein de votre propre application. À ce stade, vous savez exactement quelle activité vous souhaitez démarrer. Il n’ya donc aucune raison de passer par le travail supplémentaire que représente la définition des intentions implicites.

24
Cheryl Simon
  1. Les intentions explicites sont utilisées pour appeler un composant spécifique. Lorsque vous savez quel composant vous souhaitez lancer et que vous ne voulez pas donner à l'utilisateur le contrôle gratuit du composant à utiliser.Par exemple, vous avez une application qui a 2 activités. Activité A et activité B. Vous souhaitez lancer l'activité B à partir de l'activité A. Dans ce cas, vous définissez une activité de ciblage d'intention explicite B, puis vous l'utilisez pour l'appeler directement. 

  2. Les intentions implicites sont utilisées lorsque vous avez une idée de ce que vous voulez faire, mais vous ne savez pas quel composant doit être lancé. Ou si vous voulez donner à l'utilisateur une option pour choisir entre une liste de composants à utiliser. Si ces intentions sont envoyées au système Android, il recherche tous les composants enregistrés pour l'action spécifique et le type de données. Si un seul composant est trouvé, Android le lance directement. Par exemple, vous avez une application qui utilise l'appareil photo pour prendre des photos. Une des fonctionnalités de votre application est que vous donnez à l'utilisateur la possibilité d'envoyer les photos qu'il a prises. Vous ne savez pas quel type d'application l'utilisateur peut envoyer des photos et vous souhaitez également lui donner la possibilité de choisir quelle application externe utiliser s'il en possède plusieurs. Dans ce cas, vous n'utiliseriez pas d'intention explicite. A la place, vous devez utiliser une intention implicite dont l'action est définie sur ACTION_SEND et ses données supplémentaires définies sur l'URI de la photo.

    Une intention explicite est toujours livrée à sa cible, peu importe ce qu'elle contient. le filtre n'est pas consulté. Mais une intention implicite n'est transmise à un composant que s'il peut passer par l'un des filtres du composant.

20
Varun Bhatia

1) Intention explicite: nom du composant que le développeur sait, nom spécifié dans Intention.

2) Intention implicite: Non spécifié un composant dans l'intention.

12
Daniel Raja Singh

Quand tu sais et quand tu ne sais pas

Intention explicite: utilise l'intention explicite lorsque vous savez exactement quelle activité peut traiter votre demande.
Un exemple très courant serait, vous avez une activité de liste et lorsque vous cliquez sur un élément de la liste, il ouvre une activité de détail. Dans ce cas, vous savez que les détails od de l’élément de la liste peuvent être affichés ou gérés par DetailActivity.class (ou com.yourpackage.DetailActivity) de votre application . Vous pouvez donc commencer l’activité en donnant une nom du paquet 

startActivity(this,com.yourPackage.DetaiActivy.class);

Intention implicite: Lorsque vous ne savez pas quelle activité de quelle application peut traiter votre demande (ACTION). Ensuite, vous laissez la tâche à OS.
Exemple: Vous avez une liste d’éléments de la chanson et lorsque vous cliquez sur un élément, la chanson doit être lue. Vous ne savez pas qui peut traiter votre demande, alors vous laissez l’OS le décider pour vous.

Dans ce cas
1) Vous écrivez une intention
2) Ajouter l'action
3) Début de l'activité 

intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(songPath);

Comment OS décide?

Il existe un terme pour cela, appelé résolution d'intention.
Dans l’intention de résolution, le système d’exploitation supprime l’action spécifiée dans votre intention et va dans PackageManager. Il examine ensuite toutes les activités enregistrées avec un filtre d’intention de toutes les applications installées sur votre appareil. puis il affiche la fenêtre contextuelle avec la liste des applications appropriées . Ainsi, le moyen le plus sûr d’écrire une intention implicite est la suivante: 

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(songPath);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

Comment faire en sorte que votre application entre dans cette liste contextuelle?

Supposons que vous êtes dans l'explorateur de fichiers et que vous cliquez sur un fichier musical, puis une intention implicite est déclenchée par une action et des données supplémentaires . Si vous souhaitez que vos applications soient ajoutées à la liste des applications, vous devez enregistrer une intention. filtrer avec l'action dans le fichier AndroidManifest.xml. Comme ça.

<application
    .....  >

    ......
    <activity Android:name=".MusicActivity">
        <intent-filter>
            <action Android:name="Android.intent.action.VIEW" />
            <data Android:type="audio/*" />
        </intent-filter>
    </activity>
 ..... 


</application>

Références
Liste des intentions communes et des actions
Pour en savoir plus sur les filtres d’intention et la résolution de l’intention

4
Rohit Singh

De Docs :

Il existe deux types d'intentions:

  • Intentions explicites spécifie le composant à démarrer par son nom (le nom de classe qualifié complet). Vous utiliserez généralement une intention explicite pour démarrer un composant dans votre propre application, car vous connaissez le nom de classe de l'activité ou du service que vous souhaitez démarrer. Par exemple, vous pouvez démarrer une nouvelle activité en réponse à une action de l'utilisateur ou démarrer un service pour télécharger un fichier en arrière-plan.
  • Intentions implicites ne nomme pas un composant spécifique, mais déclare plutôt une action générale à effectuer, qui permet à un composant d'une autre application de la gérer. Par exemple, si vous souhaitez montrer à l'utilisateur un emplacement sur une carte, vous pouvez utiliser une intention implicite pour demander à une autre application capable d'afficher un emplacement spécifié sur une carte.
3
Ivan

Nous pouvons simplement décrire les deux intentions de ce genre.

Intention explicite: Ils sont utilisés pour la communication entre deux activités dans une seule application.

exemple: considérons une application qui a une page de connexion composée de deux champs (par exemple, nom d'utilisateur et mot de passe). Si les deux sont vrais, cela nous mènera à une page qui affiche le champ de nom d'utilisateur que nous avons entré auparavant. Dans ce cas, nous utilisons des intentions explicites car nous devons modifier les activités et transférer les données d'une activité à l'autre (champ Nom d'utilisateur) dans la même application.

Intentions implicites: Ils sont utilisés pour la communication entre deux activités d'applications différentes.

ex: considérons une application de nouvelles décrivant un accident dans lequel la vidéo de l'accident est enregistrée et téléchargée sur Facebook. En cliquant sur le lien indiqué dans l'application de nouvelles, il nous dirigera vers Facebook. Dans ce cas, la communication se fait entre une activité dans l'application de nouvelles et une activité dans l'application Facebook. Pour cela, nous utilisons des intentions implicites.

J'espère que tu peux comprendre. 

0
Roshan S

Intention implicite

  • Il ouvre la nouvelle application sans spécifier laquelle il faut installer.
  • Il spécifie uniquement l'action à exécuter et ne spécifie pas directement les composants Android.
  • L'URI peut être utilisé avec une intention implicite pour spécifier le type de données.

Intention explicite

  • Il va lancer une application spécifique et est défini lors de l'écriture du code.
  • Il est utilisé dans l'application même dans laquelle une activité peut basculer vers une autre activité.
  • Utilisé pour transmettre des données à une autre activité à l'aide de la méthode put extra et récupéré par l'activité cible getIntent ().
  • Il est toujours livré à la cible même le filtre n'est pas consulté.
0
KARSHIL SHETH
  1. Intention implicite - Lorsque nous voulons appeler les composants du système par l’intention d’exécuter une tâche particulière et que nous ne connaissons pas vraiment le nom des composants à utiliser, le système Android affiche la liste des applications souhaitées pour exécuter la tâche.
  2. Intention explicite - Lorsque nous souhaitons appeler une autre activité avec le nom complet qualifié de l’activité, nous connaissons bien sûr le nom de l’activité.
0
Ajay Vishwakarma