Frage

Arbeiten mit android Ich erkannte, dass implizite Absichten sind gute Wahl in den meisten Fällen aufgrund ihrer Flexibilität. Aber was ist über explizite Absichten? Welche Vorteile mit ihnen? Was sind häufig Fälle, in denen es eine gute Praxis ist, sie zu benutzen?

War es hilfreich?

Lösung

Implizite Intents nicht direkt auf die Android-Komponenten an, die aufgerufen werden soll, es gibt nur Aktion durchgeführt werden. Ein Uri kann mit der impliziten Absicht verwendet werden, um den Datentyp angeben.

zum Beispiel

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

Dies bewirkt, dass Web-Browser eine Webseite zu öffnen. Android-System sucht nach allen Komponenten, die für die spezifische Aktion und die Daten type.If viele Komponenten gefunden registriert werden dann der Benutzer auswählen kann, welche Komponente zu verwenden ..

Explicit Absichten in der Anwendung verwendet werden, selbst bei einer Aktivität zur anderen Aktivität umschalten ... Beispiel Intent intent = new Intent(this,Target.class); Dies bewirkt, dass die Aktivität von aktuellem Kontext auf das Zielschaltaktivität. Explizite Intents kann auch durch Zielaktivität durch putExtra Methoden übergeben Daten an andere Aktivität unter Verwendung von getIntent().getExtras() Verfahren und abgerufen werden.

Hope this geholfen.

Andere Tipps

Sie verwenden in der Regel explizit Absichten für Aktivitäten innerhalb Ihrer eigenen Anwendung zu starten. Zu diesem Zeitpunkt wissen Sie genau, welche Aktivität Sie starten wollen, so gibt es keinen Grund, durch die zusätzliche Arbeit der Einrichtung der impliziten Absichten zu gehen.

  1. sind explizite Intents verwendet, um eine bestimmte Komponente zu nennen. Wenn Sie wissen, welche Komponente Sie starten möchten, und Sie wollen nicht den Benutzer frei Kontrolle darüber, welche Komponente zu use.For Beispiel geben, haben Sie eine Anwendung, die zwei Aktivitäten. Aktivität A und Aktivität B. Sie wollen Start Aktivität B von Aktivität A. In diesem Fall definieren Sie eine explizite Absicht ACTIVITYB Targeting und dann verwenden, um es direkt aufrufen.

  2. Implizite Intents verwendet werden, wenn Sie eine Vorstellung davon haben, was Sie tun wollen, aber Sie wissen nicht, welche Komponente gestartet werden soll. Oder wenn Sie möchten, dem Benutzer eine Möglichkeit geben, zwischen einer Liste der Komponenten zu verwenden zu wählen. Wenn diese Intents auf das Android-System senden, werden durchsucht es für alle Komponenten, die für die spezifische Aktion und den Datentyp registriert sind. Wenn nur eine Komponente gefunden wird, startet Android die Komponente direkt. Zum Beispiel haben Sie eine Anwendung, die die Kamera Fotos machen verwendet. Eines der Merkmale der Anwendung ist, dass Sie dem Benutzer die Möglichkeit geben, die Fotos zu senden er genommen hat. Sie wissen nicht, was der Benutzer Art der Anwendung hat die Fotos senden können, und Sie wollen auch dem Benutzer eine Möglichkeit geben, die externe Anwendung zu wählen, zu verwenden, wenn er mehr als eine hat. In diesem Fall würden Sie keine explizite Absicht verwenden. Stattdessen sollten Sie eine implizite Absicht verwenden, die ihre Wirkung Satz ACTION_SEND und seine Daten zusätzlichen Satz an den URI des Fotos hat.

    Eine explizite Absicht ist immer das Ziel, egal, was es enthält; die Filter nicht zu Rate gezogen. Aber eine implizite Absicht ist nur eine Komponente geliefert, wenn sie durch eine der Komponente Filter passieren kann

1) Explizite Intent:. Komponente Name Entwickler Know so, Name in Intent angegeben

2) Implizite Intent:. Nicht eine Komponente in Intent angegeben

KEY: Wenn Sie wissen, und wenn Sie nicht wissen,

Explicit Intent:

Verwenden Sie explizite Absicht, wenn Sie genau wissen, welche Activity Ihre Anfrage bearbeiten kann.

Beispiel: Sie haben eine Liste Aktivität und wenn Sie ein Element in der Liste klicken öffnet sich eine ausführliche Aktivität. In diesem Fall Sie KNOW , dass die Details des Produkts können durch DetailActivity.class Ihrer Anwendung angezeigt oder bearbeitet werden. So zum Ausführen dieser Aktion erstellen Sie Intent ein durch die Klassennamen explizit angeben.

Intent showDeatil = new Intent(this,DetaiActivy.class);  
startActivity(showDeatil);

Implizite Intent :

Verwenden implizite Absicht, wenn Sie nicht wissen, welche Aktivität von welcher Anwendung / s Ihre Anfrage bearbeiten kann.

Beispiel: Sie einen Link haben. Wenn Sie auf den Link klicken sollte die Webseite in einigen Browser öffnen. Sie Sie wissen nicht, genau, welche Aktivität, in der Anwendung, um Ihre Anfrage bearbeiten kann. Sie haben nur eine vage Vorstellung, dass es eine Webseite Link, so dass es eine Webseite in einigen Browser geöffnet werden soll, wenn jemand sie sich öffnet. In diesem Fall geben Sie einfach die Aktion und dann OS kümmert sich um den Rest.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);

BONUS:

Wie O entscheidet?

Es gibt einen Begriff dafür. Es Intent Auflösung genannt.
In Intent Auflösung.

  • OS führt die Aktion in Ihrer Absicht angegeben werden.

  • Geht in der Packagemanager und sieht für alle registrierten oben Aktivitäten mit der passenden ACTION alle die Anwendung auf Ihrem Gerät installiert ist.

  • Zeigt die Liste aller passenden Anwendungen in einem Pop-up.

Ein sicherer Weg, implizite Absichten zu schreiben.

Manchmal ist es möglich, dass es keine Aktivität sein, die mit der Aktion übereinstimmt. In diesem Fall erhalten Sie eine Nullpointer bekommen. So eine stärker bevorzugte Weise ist diese

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

Wie Ihre Anwendung erhält innerhalb dieser Popup-Liste?

machen

Angenommen, Sie haben einige Browser Application geschrieben. Wenn Sie Ihre Anwendungen in der Pop-up-Liste auftauchen sollen, wenn jemand öffnet den Link. Dann müssen Sie Ihre Aktivität mit der Maßnahme einzusetzende Intent Filter AndroidManifest.xml Datei registrieren. So wie hier.

<application
    .....  >

    ......
    <activity android:name=".YourBrowserActivity">
        <action android:name="android.intent.action.VIEW" />       
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
    </activity>
 ..... 


</application>

Referenzen
Gemeinsame Intent Maßnahmen und ihre Liste Intent-Filter
Mehr zu Intent Filter und Intent Auflösung

Docs :

Es gibt zwei Arten von Absichten:

  • Explicit Absichten geben Sie die Komponente nach Namen (der vollständig qualifizierte Klassenname) zu starten. Sie werden in der Regel eine explizite Absicht verwenden, um eine Komponente in Ihrer eigenen App zu starten, weil Sie den Klassennamen der Aktivität oder Dienstleistung, die Sie starten möchten wissen. Zum Beispiel können Sie eine neue Aktivität in Reaktion auf eine Benutzeraktion starten oder einen Dienst starten, eine Datei im Hintergrund herunterzuladen.
  • Implizite Absichten keine bestimmte Komponente nennen, sondern eine allgemeine Aktion erklärt auszuführen, die eine Komponente aus einer anderen App ermöglicht es zu handhaben. Zum Beispiel, wenn Sie dem Benutzer eine Position auf einer Karte anzeigen möchten, können Sie eine implizite Absicht Anfrage verwenden, dass eine andere Lage App eine bestimmte Position auf einer Karte zeigen.
  1. Implizite Absicht - Wenn wir die Systemkomponenten durch Absicht nennen wollen eine bestimmte Aufgabe zu erfüllen, und wir wissen nicht wirklich den Namen der Komponenten verwendet werden, die Android-System die gewünschte Liste der Anwendungen zeigen die auszuführen Aufgabe.
  2. Explicit Absicht -. Wenn wir die andere Tätigkeit mit den vollen qualifizierten Namen der Aktivität anrufen mögen, und natürlich kennen wir den Namen der Aktivität

Einfach können wir beide Absichten wie folgt beschreiben ..

Explicit Intents:. Sie sind für die Kommunikation zwischen zwei Aktivitäten in einer einzigen Anwendung verwendet

zB: eine Anwendung betrachten, die eine Login-Seite, bestehend aus zwei Felder hat (zB Benutzername und Passwort) .Wenn beide sind wahr es uns zu einer Seite führt, die zeigt den Benutzernamen Feld, das wir before.In diesen Fall kamen wir verwenden ausdrückliche Absichten, weil wir die Aktivitäten und tragen Daten von einer Tätigkeit auf die andere Aktivität (Benutzername Feld) in der gleichen Anwendung ändern müssen.

Implizite Intents:. Sie sind für die Kommunikation zwischen zwei Aktivitäten verschiedener Anwendungen verwendet

Beispiel: Betrachten Sie einen Nachrichten-App, die über einen Unfall beschrieben, bei dem das Video Unfall aufgezeichnet und in Facebook hochgeladen. Während in dem Nachrichten-App gegeben auf dem Link zu klicken, es uns zu Facebook .In diesen Fall leiten wird die Kommunikation zwischen einer Tätigkeit in Nachrichten-App und und eine Tätigkeit in Facebook app.For diesen Zweck verwenden wir Implizite Intents ist.

Ich hoffe, Sie verstehen können.

Implizite Intent

  • Sie zieht die neue Anwendung, ohne spezifiziert werden, welche nach oben zu ziehen.
  • Es gibt nur Aktion durchgeführt werden und nicht direkt Android-Komponenten angeben.
  • kann URI mit impliziten Intent verwendet werden, um den Datentyp angeben.

Explicit Intent

  • Es wird eine spezifische Anwendung hochziehen und festgelegt wird, während der Code zu schreiben.
  • Es wird in der Anwendung selbst verwendet wird, bei einer Aktivität zur anderen Aktivität wechseln.
  • Wird verwendet, um Daten an andere Aktivität übergeben sich zusätzliche Methode setzen und durch Zielaktivität getIntent abgerufen ().
  • Es wird immer geliefert auch Filter zum Ziel ist nicht zu Rate gezogen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top