绑定远程服务

时间:2019-10-14 20:44:23

标签: android service

我有一个带有远程服务的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;

但是我不明白为什么以及如何解决它。我什至不确定我所做的是否正确。谢谢。

0 个答案:

没有答案