別のプロジェクトで一部のサービス レイヤー コードを再利用したいと考えています。サービス コードを変更せずに、サービスが使用するメンバー変数の 1 つを変更できるようにしたいと考えています。サービスを「作成」していないため、これを行う方法がわかりません。マニフェストとシステムがそれを行います。したがって、コンストラクターで何かを渡すことはできません。
この質問をするための言葉を見つけるのに苦労しているので、簡単な例を挙げたほうがよいでしょう。次のようなサービスがあります。
public class MyService extends Service implements MyCommunicatorListener {
ICommunicator _comm = new BlueToothCommunicator(); // great for project 1, not for project 2!
public void shutUpCommunicator() // example of using communicator
{
_comm.Shutup();
}
// MyCommunicatorListener methods
@Override
public void onPageReceived(Page page) { // example of listening to communicator
Log.d(TAG,"onPageReceived");
}
} // class greatly simplified...
すべてうまくいきます。マニフェストで宣言されているという事実のおかげで、サービスが開始されました。
<service android:name="com.acme.servicelayer.MyService" android:process=":remote" >
<intent-filter>
<action android:name="com.acme.servicelayer.MyService" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</service>
このサービス コードを保持し、別のプロジェクトで再利用したいと考えています。他のプロジェクトでは、使用したくありません:
ICommunicator _comm = new BlueToothCommunicator(); // great for project 1, not for project 2!
使用したい: ICommunicator _comm = new WiFiCommunicator(); // プロジェクト 1 ではなく、プロジェクト 2 に最適です! これを行い、同じコード ベースを維持するにはどうすればよいですか? マニフェストを介して引数を渡す方法はありますか? ありがとう、デイブ