Android: java.lang.IllegalArgumentException: служба не зарегистрирована

У меня есть активность, которая запускает службу и связывает ее. Но я хочу, чтобы моя служба работала, даже если активность закрыта, поэтому мне нужно ее отвязать. Когда я пытаюсь это сделать (вызывая мою функцию разъединения от службы), я всегда получаю это исключение.

Служба успешно привязана, и я могу общаться с ней. Я пытаюсь отвязать службу, только если она связана.

Я думаю, я пытаюсь связать и развязать службу из одного и того же контекста - это - вызовы связывания и развязки происходят из функций MainActivity.

Основная деятельность:

public class MainActivity extends AppCompatActivity {

private boolean bounded;
private SturkoPlayerService sturkoService;

...

//Connection
...
private ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        SturkoPlayerService.LocalBinder mBinder = (SturkoPlayerService.LocalBinder) service;
        sturkoService = mBinder.getService();
        bound = true;
        ...
        Log.d(DEBUG_S, "Service bind: " + (bounded && sturkoService!=null)); //Binding successful           
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        bound = false;
        sturkoService = null;
    }
};
...


//Binding in MainActivity code
...
Intent startingIntent = new Intent(this, SturkoPlayerService.class);
startingIntent.setAction(SturkoPlayerService.PLAYER_START);
bindService(startingIntent, connection, Context.BIND_AUTO_CREATE);
...

//Unbinding
private void disconnectFromService() {
    if (sturkoService != null && bound) {
        ...
        this.unbindService(connection);
    }
}
...
}

Услуга:

public class SturkoPlayerService extends Service {
...
    public class LocalBinder extends Binder {
        public SturkoPlayerService getService() {
            return SturkoPlayerService.this;
        }
    }
...
}

EDIT1: Logcat

04-14 11:57:51.873 2890-2890 D/sturkoPlayer: START
04-14 11:57:51.873 2890-2890 D/sturkoPlayer: Service bind: true
04-14 11:58:01.406 2890-2890 W/System.err: java.lang.IllegalArgumentException: Service not registered: ....MainActivity$1@4221e2d8
04-14 11:58:01.521 2890-2890 W/System.err:     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:947)
04-14 11:58:01.521 2890-2890 W/System.err:     at android.app.ContextImpl.unbindService(ContextImpl.java:1277)
04-14 11:58:01.522 2890-2890 W/System.err:     at android.content.ContextWrapper.unbindService(ContextWrapper.java:405)
04-14 11:58:01.522 2890-2890 W/System.err:     at ...MainActivity.disconnectFromService(MainActivity.java:122)
04-14 11:58:01.522 2890-2890 W/System.err:     at ...MainActivity.onStop(MainActivity.java:132)
04-14 11:58:01.522 2890-2890 W/System.err:     at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1210)
04-14 11:58:01.522 2890-2890 W/System.err:     at android.app.Activity.performStop(Activity.java:5158)
04-14 11:58:01.523 2890-2890 W/System.err:     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3397)
04-14 11:58:01.523 2890-2890 W/System.err:     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3456)
04-14 11:58:01.525 2890-2890 W/System.err:     at android.app.ActivityThread.access$1200(ActivityThread.java:149)
04-14 11:58:01.526 2890-2890 W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
04-14 11:58:01.527 2890-2890 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 11:58:01.527 2890-2890 W/System.err:     at android.os.Looper.loop(Looper.java:153)
04-14 11:58:01.527 2890-2890 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:4987)
04-14 11:58:01.528 2890-2890 W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
04-14 11:58:01.528 2890-2890 W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
04-14 11:58:01.529 2890-2890 W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
04-14 11:58:01.531 2890-2890 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
04-14 11:58:01.541 2890-2890 W/System.err:     at dalvik.system.NativeStart.main(Native Method)

Edit2: в манифесте, под действием

<service
    android:name=".Service.SturkoPlayerService"
    android:enabled="true"
    android:exported="true"></service>

РЕШЕНИЕ:

Проблема заключалась в том, что функция "disconnectFromService()" вызывалась и из finish(), и из onStop(). Так его вызывали дважды, когда деятельность уже собиралась закрыться.

После удаления вызова из onStop() исключение больше не генерируется.

К сожалению, эта ошибка была просто моей глупостью.


person Johnny    schedule 14.04.2017    source источник


Ответы (3)


Решение

Проблема заключалась в том, что функция disconnectFromService() вызывалась из finish() и из onStop() тоже. Так его вызывали дважды, когда деятельность уже собиралась закрыться.

После удаления вызова из onStop() исключение больше не генерируется.

К сожалению, эта ошибка была просто моей глупостью.

person Johnny    schedule 14.04.2017

Добавьте строку ниже в свой AndroidManifest.xml

<service android:name="you_package_name:your_service_name"/>

or

<service android:name="you_package_name:SturkoPlayerService" />
person Arsalan Khan    schedule 14.04.2017
comment
Ваша служба находится в папке службы и сначала добавляется без добавления пустого тела, может работать - person Arsalan Khan; 14.04.2017

Добавьте SturkoPlayerService в тег приложения в Androidmanifest.xml.

<service android:name="yourpackage.SturkoPlayerService" />
person Pehlaj - Mobile Apps Developer    schedule 14.04.2017