gpt4 book ai didi

java - 使用服务时发生 ClassCastException

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:21 24 4
gpt4 key购买 nike

我定义了一个本地服务:

public class ComService extends Service implements IComService {
private IBinder binder = new ComServiceBinder();

public class ComServiceBinder extends Binder implements IComService.IServiceBinder {
public IComService getService() {
return ComService.this;
}
}

public void test(String msg) {
System.out.println(msg);
}

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

对应的接口(interface):

public interface IComService {
public void test(String msg);

public interface IServiceBinder {
IComService getService();
}
}

然后我尝试在另一个应用程序的另一个 Activity 中绑定(bind)服务,其中有相同的接口(interface)可用:

bindService(new Intent("ch.ifi.csg.games4blue.gamebase.api.ComService"), conn, Context.BIND_AUTO_CREATE);

private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("INFO", "Service bound " + name);
comService = ((IComService.IServiceBinder)service).getService();
serviceHandler.sendEmptyMessage(0);
}

@Override
public void onServiceDisconnected(ComponentName arg0) {
Log.i("INFO", "Service Unbound ");
}
};

但是线

comService = ((IComService.IServiceBinder)service).getService();

总是抛出一个

05-02 22:12:55.922: ERROR/AndroidRuntime(622): java.lang.ClassCastException: android.os.BinderProxy

我无法解释为什么,我遵循了 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.html 上的应用示例

任何提示都很好!

最佳答案

您需要使用 AIDL 来定义跨应用程序的接口(interface)(所谓的“远程服务”)。您遵循了一个本地绑定(bind)示例,但您没有使用本地绑定(bind)。尝试 thisthis使用 AIDL 的远程绑定(bind)示例的示例项目。

关于java - 使用服务时发生 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com