gpt4 book ai didi

java.lang.ClassCastException : android. os.BinderProxy 无法转换为 xxx$LocalBinder

转载 作者:搜寻专家 更新时间:2023-11-01 08:37:17 26 4
gpt4 key购买 nike

我正在实现一个服务,并在该服务之上有一个包装类,该类在本地绑定(bind)到它。现在,当我将服务导出为 jar 并从另一个应用程序链接到它时(此应用程序实例化包装类)。当我运行应用程序时,我收到 ClassCastException: android.os.BinderProxy cannot be cast to xxx$LocalBinder由包装类中的本地绑定(bind)引起:

service = ((LocalBinder) binder).getService();

此处的 Binder 是 BinderProxy 类型而不是 localbinder,因此会发生崩溃。

此应用程序工作的唯一方式是应用程序的包名称与服务包名称相同(我假设 android 认为服务是本地的)。

private final IBinder localBinder = new LocalBinder();
public class LocalBinder extends Binder {
xxxService getService() {
return xxxService.this;
}
}

public IBinder onBind( Intent intent ) {
IBinder result = null;
result = localbinder;
return result;
}

然后在我的包装类 onServiceConnected 中:

    public void onServiceConnected( ComponentName name, IBinder binder) {   

xxxService = ((LocalBinder) binder).getService();

最后是我的包装类构造函数:

public xxxServiceManager( Context context ) throws Exception {
this.context = context;
xxxServiceManagerIntent = new Intent( "providerAPI" );
xxxServiceManagerIntent.setClassName( "com.yyy", "com.yyy.xxxService" );

context.startService( xxxServiceManagerIntent );


context.bindService( xxxServiceManagerIntent, serviceConnection, Context.BIND_AUTO_CREATE );

然后在使用这个jar的主应用中,如果设置包名

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yyy.provider" //the same as the service (which does not make sense)

一切正常,但显然我想设置另一个包名。有什么方法可以重新设计或使它起作用吗?

谢谢!

最佳答案

参见 this

如果您的服务仅供本地应用程序使用,不需要跨进程工作,那么您可以实现自己的 Binder 类,让您的客户端可以直接访问服务中的公共(public)方法。

Note: This works only if the client and service are in the same application and process, which is most common. For example, this would work well for a music application that needs to bind an activity to its own service that's playing music in the background.

关于java.lang.ClassCastException : android. os.BinderProxy 无法转换为 xxx$LocalBinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751983/

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