У меня есть приложение 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;
Но я не понимаю, почему и какпочини это. Я даже не уверен, правильно ли я сделал то, что сделал. Спасибо.