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?
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é.
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.
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.
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.
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.
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);
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);
}
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
De Docs :
Il existe deux types d'intentions:
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.