Quelle est la différence entre L'appel D'activité explicite et implicite dans android?

Quelle est la différence entre un appel d'activité explicite et implicite sur android? Si vous expliquez la réponse avec un exemple simple sera la bonne.

34
demandé sur naXa 2012-04-23 02:32:03

5 réponses

Par exemple:

appel d'activité implicite

Dans l'intention de filtre que vous créez action de votre activité, afin que les autres app pouvez appeler votre activité par le biais de cette action de la manière suivante:

<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 la suivante:

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

appel D'activités explicite

vous faites 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 à propos de L'appel D'activité explicite et implicite dans android.

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

50
répondu MichaelP 2017-03-29 01:46:29
  1. Les intentions explicites sont utilisées pour appeler un composant spécifique. Lorsque vous connaissez le composant que vous souhaitez lancer et vous ne voulez pas donner à l'utilisateur libre de contrôle sur le composant à utiliser.Par exemple, vous avez une application qui comporte deux activités. Activité A et activité B. Vous voulez lancer l'activité B à partir de l'activité A. Dans ce cas, vous définissez une intention explicite ciblant l'activité 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 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 le composant directement. Par exemple, vous avez une application qui utilise l'appareil photo pour prendre des photos. Une des caractéristiques de votre application est que vous donner à l'utilisateur la possibilité d'envoyer les photos qu'il a prises. Vous ne savez pas quel type d'application l'Utilisateur a qui peut envoyer des photos, et vous voulez également donner à l'utilisateur une option de choisir quelle application externe Utiliser s'il a plus d'un. Dans ce cas, vous n'utiliserez pas une intention explicite. Vous devriez plutôt utiliser une intention implicite qui a son action définie à ACTION_SEND et ses données extra définies à L'URI de la photo.

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

24
répondu Varun Bhatia 2013-12-22 10:53:44

Voir l'Intention de la Résolution ici

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

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

2
répondu Simon 2012-04-22 22:41:24

il y a deux types d'intentions:

  • Intention Explicite:

    tout en créant un objet D'intention lorsque nous spécifions explicitement et transmettons le nom de la composante 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 en utilisant des filtres d'intention qui 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, emplacement pin sur une carte, etc.) que l'on passe. Donc Android lancera automatiquement le composant à partir de la même application ou d'une autre application qui peut gérer le message/travail d'intention. l'idée dans ce cas est que, disons que nous devons épingler un emplacement sur une carte, pour cela nous n'avons pas besoin de coder notre propre activité pour gérer cela. Au lieu de 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
répondu YOmna 2015-12-30 07:56:47

quand utiliser quoi?

intention Explicite: lorsque vous savez quel composant peut traiter votre demande. Afin de vous mentionnez explicitement le nom du composant dans l'intention.

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

l'intention Implicite: Si vous ne savez pas quelle application peut traiter votre demande alors vous mentionner l'action dans l'intention et laisser L'EO décider quelle (s) application (s) convient (NT) à votre tâche.

Exemple: Play la musique

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

comment OS décide?

quand il y a appel implicite avec une intention alors OS prend l'action et puis il correspond avec toutes les intentions-filtres de toutes les activités enregistrées de toute l'application en utilisant PackageManager et puis popule le résultat sous forme de liste. Il est appelé résolution d'intention

Il est donc possible qu'aucune application disponible dans votre appareil ne puisse traiter votre demande. Dans ce cas, vous obtenir NullPointer Exception.

une façon plus sûre d'appeler l'intention implicite serait donc celle-ci

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}
0
répondu Rohit Singh 2018-10-06 12:14:59