Ich habe versucht, zwei Aktivitäten in zwei separaten Anwendungen zu erhalten, um mit einer benutzerdefinierten Aktion und einer impliziten Absicht zu kommunizieren.
Die erste Anwendung (Server) hat das folgende Manifest:
%Vor%Die zweite Anwendung erstellt eine Absicht wie folgt:
%Vor%Sein Manifest ist normal. Wenn ich versuche, die Absicht in der Client-Anwendung zu senden, bekomme ich jedoch eine Ausnahme für die Aktivität nicht gefunden:
%Vor%Was verursacht, dass Android die erklärte Aktivität in der zweiten Anwendung nicht erkennt? Danke.
Nachdem ich viel gesucht habe, habe ich folgendes gefunden:
Wenn Sie einen integrierten Aktionstyp verwenden und ein Datenfeld oder anfügen, wenn Sie einen benutzerdefinierten Aktionstyp ohne Datenfeld verwenden , ein intent-filter
ohne ein data
Element ist in Ordnung.
Wenn Sie jedoch eine benutzerdefinierte Aktion definieren, die und ein Datenfeld enthält, müssen Sie mime-type
für den angehängten URI manuell festlegen. Die Android-Dokumentation beansprucht das
Normalerweise wird der Typ aus den Daten selbst abgeleitet. Indem Sie dieses Attribut setzen, deaktivieren Sie diese Auswertung und erzwingen einen expliziten Typ.
Aber das ist nicht der Fall. Als ich einen file://
URI eingegeben habe, der in .txt
endete, hat Android ihm ein null mime-type
zugewiesen, so dass es nicht mit any intent-filter
übereinstimmt, auch nicht mit einem data
und */*
mime-type
. Ich musste den Typ der Absicht manuell mit setDataAndType()
festlegen.
Kurz gesagt: Sie müssen das mime-type
einer Absicht manuell definieren, wenn Sie eine benutzerdefinierte Aktion mit Daten verwenden.
Erstens Sie können nur angeben, zu welcher Anwendung es gehen soll; Du kannst nicht angeben, zu welcher Avtivität es gehen soll; Ich habe bereits geantwortet, wie ich zu einer anderen App navigieren kann hier ; Danach geht Ihre Kontrolle an die andere App; Du musst damit umgehen
Tags und Links android android-manifest android-intent