2012-04-03 25 views
0

私は2つのアプリケーションを書いています。 MyServiceApplicationおよびMyActivityApplicationである。 起動時にリモートサービスとして動作するMyServiceを起動します。 MyActivityApplicationMyActivityApplicationと通信するにはMyServiceApplicationクラスにアクセスできません。すべての例では、私は次のようにサービスにオンライン帯にアクティビティを参照してください。Android - 他のアプリからサービスにバインド

bindService(new Intent(Binding.this, MyService.class), mConnection, Context.BIND_AUTO_CREATE); 

私のアプリケーションはMyServiceと通信する必要があります。このコードは、GoogleのMessengerService例に基づいています。

私が先に述べたような問題は、私がバインドしようとしているサービスが、このサービスを開始することを唯一の目的とする他​​のアプリケーションによって開始されたことです。

両方のアプリケーションを独立させておくことができる場所はありますか?アイデアは、私が同じサービスと通信することができる2番目、3番目、4番目のアプリケーションをすべて持っているということです。

答えて

1

サービスとアプリケーションの間に、バインドされたサービスと通信するために使用するインターフェイスを定義する共有ライブラリが必要です。

+0

だから、あなたが効果的に自分のアプリケーションをサービスするためのクラスが含まれているjarファイルを含めるべきであるとされて言っていますか?または、2つの別々のアプリケーションを作成しても、同じコードベースを使用する必要がありますか? – Ali

+0

2つのアプリケーションで使用するライブラリプロジェクトhttp://developer.android.com/guide/developing/projects/projects-eclipse.htmlが必要です。ライブラリにはバインドされたサービスのバインダが含まれている必要があります。バインダを使用して、1)サービスアプリケーションからバインダインターフェイスを提供することができます。 2)第2のアプリをサービスにバインドするために使用される。 – Snicolas

+0

AIDLを使用する別の方法は、http://developer.android.com/guide/developing/tools/aidl.htmlです。 「共用」ライブラリを補助ファイル全体に縮小することができます。 – Snicolas

0

特定のアクションでインテントファイラーを定義し、このアクションにインテントを割り当ててこのサービスにバインドすることができます。

MyServiceApplication:

<service android:name=".MyService"> 
     <intent-filter> 
     <action android:name="com.some.action.NAME" /> 
     </intent-filter> 
</service> 

MyActivityApplication:

bindService(new Intent("com.some.action.NAME"), serviceConnection, Context.BIND_AUTO_CREATE); 
関連する問題