Привязать удаленный сервис - PullRequest
0 голосов
/ 14 октября 2019

У меня есть приложение Android с удаленным сервисом. Он написан с использованием Qt famewrok, но я не уверен, важно это или нет. Поскольку связь между службой и приложением осуществляется в C ++, мне не нужно реализовывать связь между действием и службой в Java.

Мне нужно только связать службу с моей деятельностью, когда онав фоновом режиме, поэтому сервис не будет немедленно убит. Затем позже мне нужно снова отсоединить его и запустить службу на переднем плане.

Я реализовал ServiceConnection в своей деятельности:

private ServiceConnection serviceConnection = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            MyBinder binder = (MyBinder) service;
            mServiceBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            mServiceBound = false;
        }
    };

И в своей службе я добавил:

    public class MyBinder extends Binder {
        MyService getService(){
            return MyService.this;
        }
    }

    private final IBinder mBinder = new MyBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

Затем я звоню

Intent intent = new Intent(this, MyService.class);
activity.bindService(intent, serviceConnection, BIND_AUTO_CREATE);

OnServiceConnected вызывается, и служба связывается. Но он сразу падает с этим исключением:

10-14 22:02:08.154  7908  7908 E AndroidRuntime: java.lang.ClassCastException: android.os.BinderProxy cannot be cast to cz.jech.muzika.MyService$MyBinder
10-14 22:02:08.154  7908  7908 E AndroidRuntime:        at cz.jech.muzika.Activity$1.onServiceConnected(Activity.java:53)

Понятно, что эта команда вызывает сбой:

MyBinder binder = (MyBinder) service;

Но я не понимаю, почему и какпочини это. Я даже не уверен, правильно ли я сделал то, что сделал. Спасибо.

...