2010-12-05 13 views
2

Ich versuche, eine Anwendung zu haben, die als Dienst auf Android läuft, andere Anwendungen werden verteilt, die mit ihm kommunizieren müssen.Wie zu kommunizieren zwischen Anwendungen auf Android

Es wurde als Service implementiert und die Ausführung von Client-Apps funktioniert einwandfrei, wenn sie in derselben App gepackt sind.

folgende jedoch http://developer.android.com/guide/developing/tools/aidl.html Ich habe Probleme, diese Arbeit für Client-Anwendungen zu machen, insbesondere die Linie

„in Ihrer Implementierung von ServiceConnection.onServiceConnected(), erhalten Sie eine IBinder Instanz (so genannte Service) erhalten. Rufen Sie YourInterfaceName .Stub.asInterface ((IBinder) -Dienst), um den zurückgegebenen Parameter in den YourInterface-Typ zu konvertieren. "

Da die Anwendungen getrennt verteilt sind I dont haben Zugriff auf YourInterfaceName und kopieren sie hinüber zu der Client-Anwendung auf jeden Fall fühlt sich an wie „der falsche Weg“

Wenn jemand einen Zeiger auf Dokumentation/a book/Quellcode bereitstellen könnte das wäre sehr hilfreich, dank

(und die Ironie in meinem Namen zu vergeben, war ein bisschen ein in Witz)

Antwort

2

Das Buch „Pro Android 2“ hat ein anständiges Beispiel auf AIDL ...

+0

Yeh ist es eher ärgerlich, dass die Antwort offline gehen und ein Buch lesen, aber das Beispiel Dieses Buch war viel einfacher zu verstehen als alle Online-Dokumente, die jetzt alle arbeiten, danke. –

0

Was genau die Anwendungen miteinander kommunizieren müssen? Wenn es sich um Daten handelt, können Sie einen Blick auf ContentProvider werfen. Sie können auch Informationen über Intent.putExtra teilen.

+0

Es ist ein zentraler Service und die Anwendungen, mit ihm kommunizieren müssen, um zu entscheiden, ob der Dienst gestartet wird oder nicht. Der tatsächliche Code ist auf https://github.com/daleharvey/couch-android-launcher/blob/api/src/org/couchdb/android/CouchService.java Clients, die CouchDB verwenden möchten, müssen wissen, ob oder nicht es hat gestartet usw. –

0

Sie müssen den Teil des Codes, der das Client-Ende der Binder-IPCs in die Client-Projekte einbindet, kopieren (oder anderweitig hinzufügen oder mit vergleichbarer Funktionalität umschreiben).

+0

Könnten Sie auf diese erweitern? Ich habe kein Problem, den Client-Code in den Client zu implementieren, es ist nur so, dass jedes Beispiel, das ich sehe http://developer.android.com/guide/developing/tool ​​oder http://developer.android.com/reference/android/ app/Service.html geht davon aus, dass die RemoteService-Klasse für den Client verfügbar ist, und ich kann diesen Code nicht einfach in den Client einfügen, da er die lokale Version verwenden würde, anstatt eine Verbindung mit der Remote-Version herzustellen. –

+0

Sie behalten den Teil, der die Anwendungsseite der Schnittstelle bildet, und entfernen den Teil, der die Seite des Dienstes bildet (oder entfernen Sie einfach, was sie instanziiert) –

Verwandte Themen