メソッドを介して開始できるサービスを作成しましたがstartService()
、アプリケーションによってバインドされることもあります。メソッドを介してのみ開始できることstartService()
、つまり、サービスが既に開始されている場合にのみアプリケーションがバインドできることを望みます。
- サービスは、アプリケーションがサービスにバインドするときではなく、手動で開始する必要があります。
- サービスが実行されている場合、アプリケーションはサービスにバインドできます。
- サービスが実行されていない場合、アプリケーションがサービスにバインドしようとしても、サービスは開始されません。
ただし、デフォルトの動作はまったく異なります。実際、Android は、アプリケーションがサービスにバインドしようとすると、サービスを自動的に開始します。上記の要件を達成するためにこの動作を変更できるかどうかを知りたいです。
これが不可能な場合、唯一の代替手段は、bindService()
. この方法を使用するためのサービス クラスへの変更は次のとおりです...
// It says if the service was started manually.
private boolean mCorrectlyStarted = false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG_TAG, "onStartCommand()");
mCorrectlyStarted = true; // the service is started manually: ok!
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG_TAG, String.format("onBind(intent: %s)", intent));
if (mCorrectlyStarted) {
return binder;
}
else {
stopSelf(); // although I make this call, the service is not stopped
return null;
}
}
変更しても目的の効果が得られないのはなぜですか? アプリケーションがメソッドを呼び出したときにサービスが開始されるのは良いことですが、bindService()
手動で開始されたものではないことを確認した後、サービス自体を停止する必要があります。