Я создал сервис, который можно запустить с помощью метода 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()
, но после проверки того, что он не запускался вручную, он должен остановиться.