Warum bekommen wir diese "ungültigen" Absichten?

9

Wir haben eine App mit einer Aktivität, die auf zwei Arten gestartet werden kann:

  • Von einer anderen Aktivität - immer mit zusätzlichen Daten gefüllt
  • Aus der Tiefenverknüpfung

Soweit ich sehen kann, funktioniert das immer gut. Wir erhalten entweder Intent.ACTION_VIEW mit einem Daten-URI, oder wir erhalten einige String-Extras.

Wir haben jedoch sehr wenige Fälle, in denen die Aktion Intent.ACTION_MAIN ist und keine zusätzlichen Daten vorhanden sind.

Der toString() der Absicht ist wie folgt (Klassenname geändert):

%Vor%

Intent.getExtras() gibt null zurück, Intent.getDataString() gibt null zurück.

In welchen Fällen kann das passieren? Warum ist die Kategorie für die Aktivität Intent.CATEGORY_LAUNCHER ? Wie können wir die Daten erhalten, die benötigt werden, um dem Benutzer den richtigen Inhalt zu zeigen?

launchMode ist für die Aktivität nicht angegeben. Der einzige IntentFilter in AndroidManifest.xml ist für die Tiefenverknüpfung (und nicht die Launcher-Kategorie).

Das Problem tritt bei Android 4-6 auf einer Vielzahl von Geräten auf.

Bearbeiten: Vergessen, die Flaggen zu erwähnen:

Wie der Ausdruck sagt, sind die Flags für die Absicht FLAG_ACTIVITY_NEW_TASK und FLAG_ACTIVITY_BROUGHT_TO_FRONT . Ich denke, das könnte hier relevant sein.

    
Roy Solberg 05.09.2016, 10:02
quelle

2 Antworten

1

Ich glaube, ich habe es genagelt:

Es gibt Launcher wie Nova Launcher , die es Benutzern erlaubt, mit any der App Activities anstelle des normalen Flusses zu beginnen:

Zum Beispiel können Sie eine Verknüpfung auf Ihrem Desktop hinzufügen, um den Google Mail-Client mit der Kontoeinrichtung zu starten.

Und in diesem Fall wird die Aktivität mit leerem Extras gestartet und technisch wird sie zum% code% des Startprogramms.

    
Konstantin Loginov 06.09.2016, 20:13
quelle
0

Nun, da AndroidManifest.xml vom Build-System manipuliert wird, passiert es oft, dass Bibliotheken, die Sie einschließen, auch Dinge zum Manifest hinzufügen, von denen ich vermute, dass sie hier vorkommen.

Obwohl Sie im Manifest angegeben haben, dass nur ein IntentFilter vorhanden ist, haben Sie tatsächlich die installierte App überprüft, um zu sehen, was das Manifest aussagt (anstatt sich auf das zu verlassen, was Sie in Ihren Quellcode stecken)?

Im Play Store sind verschiedene Apps verfügbar, um das Manifest einer installierten App anzuzeigen - einschließlich App Detective (das ich geschrieben habe).

    
zmarties 05.09.2016 10:22
quelle

Tags und Links