Was ist der Zweck von "android.intent.category.DEFAULT"?

103

Was ist der Zweck der Verwendung android.intent.category.DEFAULTim Feld Kategorie von Absichtsfiltern?

Pravy
quelle
2
Sie sagen, dies ist der Standardeinstiegspunkt für Ihre Anwendung. Siehe: developer.android.com/reference/android/content/…
Blundell
@Blundell: Wenn also eine implizite Absicht eintrifft, wird eine Aktivität mit Standard als Kategorie im Absichtsfilter aufgerufen?
Pravy
1
Ich glaube, es wird verwendet, um zu implizieren, dass dies die Aktivität ist, ja zu verwenden "es ist für die Verwendung in Absichtsfiltern vorgesehen, die in Paketen angegeben sind"
Blundell
Wenn mehr als eine Aktivität Standard als Kategorie enthält, welche Aktivität wird in ihren jeweiligen Absichtsfiltern aufgerufen?
Pravy
Wenn sie unterschiedliche Absichtsfilter haben, hängt dies von der Absicht ab.
Blundell

Antworten:

112

Kategorien werden für implizite Absichten verwendet. Wenn Ihre Aktivität von einer impliziten Absicht gestartet werden kann, wenn der Aktivität keine andere bestimmte Kategorie zugewiesen ist, sollte der Intent-Filter der Aktivität diese Kategorie enthalten. (auch wenn Sie andere Kategorien im Intent-Filter haben). Wenn Sie sicher sind, dass Ihre Aktivität mit einer anderen Kategorie aufgerufen werden muss , verwenden Sie nicht die Standardeinstellung.

Das Festlegen der Kategorie auf "Standard" bedeutet nicht, dass diese Aktivität beim Start Ihrer App standardmäßig verwendet wird. Die Aktivität sagt dem System nur, dass " Oh, ich könnte gestartet werden, selbst wenn die Kategorie des Starter-Intents auf" Nichts " gesetzt ist ! "

Özgür
quelle
27
Dies war eigentlich eine verständliche Erklärung. Vergleichen Sie diese Antwort mit den Dokumenten: "Legen Sie fest, ob die Aktivität eine Option für die Standardaktion (Drücken in der Mitte) sein soll, die für ein Datenelement ausgeführt werden soll. Wenn Sie diese Option festlegen, werden alle Aktivitäten vor dem Benutzer ausgeblendet, die nicht festgelegt wurden, wenn eine Aktion für einige Daten ausgeführt wird Daten "Wie schwer kann es sein, eine verständliche Beschreibung zu schreiben ...
Andreas
Ich bin mir jedoch nicht sicher über das Mandat, da es optional zu sein scheint, da eine Aktivität ohne Absichtsfilter immer noch als implizite Aktivität bezeichnet werden kann
Humblerookie
6
Die Dokumentation ist jetzt klarer IMO: Android wendet die Kategorie CATEGORY_DEFAULT automatisch auf alle impliziten Absichten an, die an startActivity () und startActivityForResult () übergeben werden. Wenn Sie also möchten, dass Ihre Aktivität implizite Absichten erhält, muss sie eine Kategorie für "android.intent.category.DEFAULT" in ihre Absichtsfilter aufnehmen.
Shkschneider
2
@ Humblerookie. Ich habe es versucht und es funktioniert nicht ohne die Kategorie DEFAULT. Wenn du mir nicht glaubst, teste es selbst.
Bob Ueland
2
Wenn nur alle Tutorials so geschrieben wären. Warum verwenden wir 2018 immer noch Holzsprache?
SudoPlz
24

Diese Kategorie wird hauptsächlich für implizite Absichten verwendet. Wenn Ihre Aktivität mit einer impliziten Absicht gestartet werden soll, sollte diese Kategorie in den Filter aufgenommen werden.

Ich denke , der Begriff „Standard“ als „default verstanden werden Kandidaten “. Wenn die Aktion für ein Datenelement in mehrere Aktivitäten aufgelöst wird, präsentiert Android dem Benutzer alle Kandidaten und der Benutzer kann seinen bevorzugten Standard auswählen.

Referenz:

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

Auszug aus dieser Seite:

Android behandelt alle impliziten Absichten, die an startActivity () übergeben wurden, so, als ob sie mindestens eine Kategorie enthalten: "android.intent.category.DEFAULT" (die CATEGORY_DEFAULT-Konstante). Daher müssen Aktivitäten, die bereit sind, implizite Absichten zu erhalten, "android.intent.category.DEFAULT" in ihre Absichtsfilter aufnehmen. (Filter mit den Einstellungen "android.intent.action.MAIN" und "android.intent.category.LAUNCHER" sind die Ausnahme. Sie markieren Aktivitäten, die neue Aufgaben beginnen und auf dem Startbildschirm dargestellt werden. Sie können "android.intent" enthalten .category.DEFAULT "in der Liste der Kategorien, muss aber nicht.)

Bruno Ranschaert
quelle
@Comptrol, Ihre Antwort ist nicht mehr unten. Es steigt. :-)
Ellen Spertus
Ja, aber ich habe es auf den Zustand zurückgesetzt, in dem es war. Insgesamt habe ich also überhaupt nichts geändert.
Özgür
1
Ich finde diese Antwort hilfreicher für meine aktuellen Filter zum Verständnis von Situationsabsichten. Danke.
Neon Warge
1

Es soll sicherstellen, dass Ihre anderen Aktivitäten aufgerufen werden können, wenn die App ausgeführt wird. LAUNCHER macht die Aktivität, die es hat, zur ersten Aktivität, die startet. Um mit Absichten zu den anderen Aktivitäten zu gelangen, müssen diese durch Setzen von DEFAULT als "tatsächliche" Aktivitäten aufgeführt werden. Das ist von dem, was ich weiß, also zitiere mich nicht, wenn es falsch ist.

CHT
quelle
3
Sie sollten sich bemühen, Referenzen für Ihre Ansprüche bereitzustellen. "Zitiere mich nicht, wenn es falsch ist" erlaubt dir nicht, diese Regel zu überschreiben.
Verybadalloc
Die Referenz, die ich habe, ist ein Projekt, an dem ich gearbeitet habe, während ich mich mit Android-Codierung befasst habe. Wenn Sie die Quelldateien möchten, sende ich sie Ihnen gerne zu.
CHT
1

Aktivitäten müssen CATEGORY_DEFAULT unterstützen, damit sie von Context.startActivity () gefunden werden können.

Um implizite Absichten zu erhalten, müssen Sie die Kategorie CATEGORY_DEFAULT in den Absichtsfilter aufnehmen. Die Methoden startActivity () und startActivityForResult () behandeln alle Absichten so, als ob sie die Kategorie CATEGORY_DEFAULT deklariert hätten. Wenn wir es nicht in unserem Absichtsfilter deklarieren, werden keine impliziten Absichten für unsere Aktivität aufgelöst.

Shinoo Goyal
quelle
0

Es wird verwendet, um eine Operation als Standardaktion zu deklarieren (wie der Name schon sagt). Nehmen wir an, wir haben eine Notizblock-App (siehe Beispiel für einen Android-Notizblock). Die erste Seite der App besteht aus einer Liste aller Editor-Dateien. Wenn eine Notizblockdatei ausgewählt ist, kann eine der Operationen wie Notiz bearbeiten, Notiz löschen usw. ausgeführt werden. Ich möchte jedoch die Bearbeitung als Standardaktion festlegen. Wenn ich also die mittlere Taste auf meiner Tastatur drücke, sollte das Bearbeitungsfenster geöffnet sein.

Prerna
quelle
1
Wenn Sie sich das Android Notepad-Beispiel ansehen, sind alle Aktivitäten als Standard markiert: developer.android.com/reference/android/content/Intent.html
Peter Ajtai
0

https://developer.android.com/guide/components/intents-filters

Um implizite Absichten zu erhalten, müssen Sie die Kategorie CATEGORY_DEFAULT in den Absichtsfilter aufnehmen. Die Methoden startActivity () und startActivityForResult () behandeln alle Absichten so, als ob sie die Kategorie CATEGORY_DEFAULT deklariert hätten. Wenn Sie diese Kategorie in Ihrem Absichtsfilter nicht deklarieren, werden keine impliziten Absichten für Ihre Aktivität aufgelöst.

Kreker
quelle