web-dev-qa-db-fra.com

Quelle est la différence entre l'appel d'activité explicite et implicite dans Android?

Quelle est la différence entre l'appel d'activité explicite et implicite dans Android? Si vous expliquez la réponse avec un exemple simple, ce sera bien.

36
Adham

Par exemple:

appel d'activité implicite

Dans le filtre d'intention, vous créez une action pour votre activité, afin qu'une autre application puisse appeler votre activité via cette action comme suit:

<activity Android:name=".BrowserActivitiy" Android:label="@string/app_name">
   <intent-filter>
      <action Android:name="Android.intent.action.VIEW" />
      <category Android:name="Android.intent.category.DEFAULT" />
      <data Android:scheme="http"/> 
   </intent-filter>
</activity>

Et l'autre façon d'appeler l'intention implicite est ci-dessous:

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

Appel d'activité explicite

Vous effectuez un appel qui indique exactement quelle classe d'activité:

Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);

J'espère que cela vous aidera à mieux comprendre l'appel d'activité explicite et implicite dans Android.

Vous pouvez obtenir plus de détails sur Android Intention ici

57
MichaelP
  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 libre sur le 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 intention explicite ciblant l'activité B, puis 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 que vous ne savez pas quel composant doit être lancé. Ou si vous souhaitez donner à l'utilisateur la possibilité de choisir entre une liste de composants à utiliser. Si ces intentions sont envoyées au système Android, il recherche tous les composants qui sont enregistrés pour l'action spécifique et le type de données. Si un seul composant est trouvé, Android démarre directement le composant. Par exemple, vous disposez d'une application qui utilise l'appareil photo pour prendre des photos. L'une des caractéristiques 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 donner à l'utilisateur la possibilité de choisir l'application externe à utiliser s'il en a plusieurs. Dans ce cas, vous n'utiliseriez pas une intention explicite. Au lieu de cela, vous devez utiliser une intention implicite qui a son action 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 délivrée à un composant que s'il peut passer à travers l'un des filtres du composant

27
Varun Bhatia

Quand utiliser quoi?

Intention explicite: Lorsque vous savez quel composant peut gérer votre demande. Donc, vous mentionnez explicitement ce nom de composant dans l'intention.

Intent i = new Intent(context,DetailActivity.class);  // DetailActivity.class is the component name
startActivity(i);

Intention implicite: Lorsque vous ne savez pas quelle application peut gérer votre demande, alors vous mentionnez l'action dans l'intention et laissez le système d'exploitation décider quelle (s) application (s) est/sont appropriée (s) pour votre tâche.

Exemple: jouer de la musique

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);

Comment OS décide-t-il?

Lorsqu'il y a un appel implicite avec une intention, le système d'exploitation supprime l'action, puis elle correspond à tous les filtres d'intention de toutes les activités enregistrées de toutes les applications utilisant PackageManager, puis remplit le résultat sous forme de liste. Il s'appelle résolution d'intention
Il est donc possible qu'aucune application ne soit disponible sur votre appareil pour traiter votre demande. Dans ce cas, vous obtiendrez l'exception NullPointer.

Donc, une façon plus sûre d'appeler intention implicite serait la

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}
2
Rohit Singh

Voir la résolution d'intention ici

http://developer.Android.com/guide/topics/intents/intents-filters.html

Les intentions (activités) explicites se réfèrent à une classe spécifique et, en général, ne sont disponibles que pour vos packages. Les intentions implicites font référence aux filtres d'intention dans lesquels les applications annoncent publiquement qu'elles peuvent gérer certains types de données ou peuvent fournir des services spécifiques, par exemple envoyer un e-mail. Avec des intentions implicites, les utilisateurs choisissent l'activité (généralement un package) à utiliser pour gérer l'intention ou si un gestionnaire par défaut est défini, il est lancé.

2
Simon

Chaque fois que je m'embrouille dans ces deux interviews. Donc, je l'ai résumé comme ceci, que cela aide quelqu'un à garder cette différence à l'esprit.

Résumé:

Dans Intentions implicites , l'utilisateur implicitement indique au système CE QUE doit être fait, sans spécifier qui doit le faire.

Dans Intentions explicites , l'utilisateur explicitement indique au système QUI doit être déclenché quel que soit le travail.

1
SaadurRehman

Il existe deux types d'intentions:

  • Intention explicite:

    Lors de la création d'un objet Intent lorsque nous spécifions et transmettons explicitement le nom du composant cible directement dans l'intention , c'est une intention explicite.

  • Intention implicite:

    Dans ce cas, nous déléguons la tâche d'évaluer les composants enregistrés (l'enregistrement se fait généralement à l'aide de filtres d'intention que nous couvrirons plus tard) à Android basé sur les données d'intention et l'action prévue (comme envoyer un e-mail, capturer une photo, épingler l'emplacement sur une carte, etc.) que nous transmettons. Donc Android lancera automatiquement le composant à partir de la même application ou d'une autre application capable de gérer l'intention message/job. L'idée dans ce cas est que, disons que nous devons épingler un emplacement sur une carte, pour cela nous n'avons pas à coder notre propre activité pour gérer cela. il suffit de transmettre les données de localisation à une application comme Google maps qui peut faire le travail au nom de notre application.

source: http://codetheory.in/Android-intents/

1
YOmna