我有一个带有远程服务的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;
但是我不明白为什么以及如何解决它。我什至不确定我所做的是否正确。谢谢。