Grant,
Das Problem hier ist eindeutig ein Missverständnis des Android Application Model. Commonsware ist absolut korrekt darüber, wie man dieses Problem lösen kann. Ohne die Grundlagen von Android zu verstehen, kann ich jedoch erkennen, warum Sie Schwierigkeiten bei der Anwendung haben. Also, eine kurze Erklärung:
Jede Aktion in Android beginnt mit einer Absicht. Dies gilt insbesondere für Aktivitäten. Jede Aktivität hat eine Absicht. Um den Entwicklern die Oberfläche zu erleichtern, können Sie auf eine Absicht des Betriebssystems reagieren ODER Sie können eine Absicht aus der zu verwendenden Klasse "Aktivitäten" erstellen. Im Allgemeinen ist es die beste Vorgehensweise, die erste Option zu wählen.
Als Reaktion auf eine Intent
Wenn eine Intent Kommissionierung zu reagieren, können Sie buchstäblich auf jede Absicht antworten. Dies wird als Aktion bezeichnet. Wenn ich einen Intent mit der Bezeichnung "FOO" erstellt habe, könnte die Aktivität in der Leiste diesen aufgreifen und darauf reagieren. Wir haben jedoch Konventionen, und die wichtigste davon ist, dass Sie Ihren Paketnamen einer beliebigen Absicht voranstellen. Zum Beispiel "com.company.package.FOO". Einfach gesagt, das ist so, dass wir Kollisionen mit anderen Apps vermeiden.
Jede Aktivität kann auf verschiedene Ereignisse reagieren. Dies ist in der AndroidManifest.xml definiert.
<activity android:name="Activity3" ... >
<intent-filter>
<action android:name="com.company.package.FOO"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Oben, wir setzen auch die Kategorie DEFAULT, so dass es sei denn, der Benutzer ändert, werden wir die einzige Anwendung, die auf unsere eigene Absicht reagiert. Die Art und Weise, dass wir dann die Absicht nennen, ist mit dem gleichen Namen, die wir geschaffen (das heißt „com.company.package.FOO“)
startActivity(new Intent("com.company.package.FOO"));
Das ist, wie es funktioniert! Sie würden einfach das obige "com.company.package.FOO" in Ihren Paketnamen (definiert durch Ihre Anwendung) und etwas Sinnvolles ändern. Ein Beispiel ist "com.testapp.ws.SWAT_FLIES".
Warum Ihr Code nicht
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
Der obige Code sieht für eine bestimmte Art von Intent Aktion arbeiten.Denken Sie daran, wenn Sie die AndroidManifest und die erste Aktivität hat Sie setzen:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
Well ... getLaunchIntentForPackage() nur die Absicht für die erste Aktivität erhält. Das ist der Grund, warum wir eine benutzerdefinierte Absicht machen ... Erstens, weil wir nicht wirklich wollen, dass es unsere dritte Aktivität ist, um unser Startup zu sein ... Und zweitens, weil das Betriebssystem uns nur die Startaktivität mitteilen wird. Wir haben es zu sagen, mit unseren eigenen Aktion (zB „com.testapp.ws.SWAT_FLIES“)
hoffe, das hilft,
FuzzicalLogic
Danke Mr.Fuzzical Logic für die detaillierte Beschreibung. Nach dem Verweisen auf Ihre Erklärung habe ich die App erfolgreich implementiert. Ich danke dir sehr! – Grant
Wie kann dies erreicht werden, wenn ich die Daten von einer Aktivität in einer App an einen Dienst in einer anderen Anwendung senden möchte. – Aada
Eigentlich brauchen Sie nur die Absicht ACTION und senden Sie die Daten über setExtra, bevor Sie den startService() auslösen. Möglicherweise müssen Sie zuerst den Intent konstruieren (zB Intent myIntent = new Intent ("com.company.app.ACTION") –