2010-12-05 17 views
2

私はアンドロイドのサービスとして動作するアプリケーションを持っていますが、他のアプリケーションはそのアプリケーションと通信する必要があります。androidのアプリケーション間の通信方法

これはサービスとして実装されており、実行中のクライアントアプリケーションは同じアプリケーション内にパッケージ化されていれば正常に動作します。

はしかし、あなたがIBinderのインスタンス(と呼ばれるサービス)を受け取ります私はServiceConnection.onServiceConnected()の実装では、特に、ライン

を」クライアントアプリケーションのためにこの作品を作る問題を抱えていますhttp://developer.android.com/guide/developing/tools/aidl.htmlを以下に示します。YourInterfaceNameを呼び出します.Stub.asInterface((IBinder)サービス)を使用して、返されたパラメータをYourInterface型にキャストします。

アプリケーションが別々に分散されているので、私は誰がドキュメント/書籍/ソースコードへのポインタを提供することができれば、間違いなく「間違った方法」

のように感じているYourInterfaceNameへのアクセス権を持っていけないし、クライアントアプリケーションに渡ってそれをコピーしますそれは、感謝

非常に参考になる(で、私の名前で皮肉を許すジョーク中のビット)を正確にアプリケーションが相互に通信する必要がありますかどう

答えて

2

著書「プロAndroidの2は」... AIDLでまともな例を持っている

+0

ええ、その答えはオフラインにして本を読むことですが、例フォームは、オンライン文書よりもはるかに理解しやすいものでした。 –

0

データの場合は、ContentProviderをご覧ください。

Intent.putExtraで情報を共有することもできます。

+0

その中央サービスおよびアプリケーションは、サービスが開始したかどうかを判断するためにそれと通信する必要があります。実際のコードはhttps://github.com/daleharvey/couch-android-launcher/blob/api/src/org/couchdb/android/CouchService.javaにあります.CouchDBを使用するクライアントは、それがあるかどうかを知る必要があります開始しました –

0

バインダーIPCのクライアント側のコード部分をクライアントプロジェクトにコピーする(またはそうでなければインクルードするか、または同等の機能で書き直す)必要があります。

+0

これを拡張できますか?私は、クライアントの中でクライアントコードを実装することに問題はありません。それはちょうど私がhttp://developer.android.com/guide/developing/toolまたはhttp://developer.android.com/reference/android/を見るすべての例です。 app/Service.htmlはRemoteServiceクラスがクライアントに利用可能であると想定しています。遠隔地に接続する代わりにローカルバージョンを使用するため、クライアントにすべてのコードを格納することはできません。 –

+0

インターフェイスのアプリケーション側を構成する部分を保持し、サービス側を構成する部分を削除する(または単純にインスタンス化する部分を削除する) –

関連する問題