Android服务-Android.os.BinderProxy不能强制转换为xxx 我知道这已经被问了很多次了 是的,我阅读了所有其他问题/答案 不,什么都没用

Android服务-Android.os.BinderProxy不能强制转换为xxx 我知道这已经被问了很多次了 是的,我阅读了所有其他问题/答案 不,什么都没用,android,service,kotlin,Android,Service,Kotlin,我绑定到一个服务,拥有我的定制绑定器实现。但是当调用onServiceConnected时,我无法将IBinder绑定到我的自定义活页夹,它会给我: java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.xxx.xxx.service.XXXService$ServiceBinder 这是我的服务和活页夹: class XXXService : Service() { private val

我绑定到一个服务,拥有我的定制绑定器实现。但是当调用
onServiceConnected
时,我无法将
IBinder
绑定到我的自定义活页夹,它会给我:

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.xxx.xxx.service.XXXService$ServiceBinder
这是我的服务和活页夹:

class XXXService : Service() {
    private val binder = ServiceBinder()

    inner class ServiceBinder : Binder() {
        override fun toString(): String {
            return "My Service Binder"
        }
    }

    override fun onBind(intent: Intent): IBinder? {
        Log.d("test", binder.toString()) // Prints correctly "My Service Binder"
        return binder
    }
}
以下是我绑定到服务的方式:

val i = Intent(mPluginContext, XXXService::class.java)
mPluginContext.bindService(i, mServiceConnection, Context.BIND_AUTO_CREATE)
此应用程序是一个应用程序的插件<代码>mPluginContext是该应用程序的上下文。我正在使用
mPluginContext
访问资源、创建视图、获取系统服务

以下是onServiceConnected方法:

override fun onServiceConnected(className: ComponentName, service: IBinder?) {
    if (service == null) {
        return
    }

    serviceBinder = service as XXXService.ServiceBinder // Crash
}
这是舱单:

<service
    android:name="com.xxx.xxx.XXXService"
    android:exported="true"
    android:label="XXX Service"/>

如果清单中没有exported属性,它将为我提供
java.lang.SecurityException:不允许启动服务

上面的一些答案是这样说的-你确定你只运行了一次服务吗我将日志放在serviceconnected()的开头,它只打印了一次

以前,此服务以相同的方式绑定,但通信是通过消息而不是绑定器进行的

对我做错了什么有什么建议吗

编辑

棘手的部分是
mPluginContext
。如果我在插件中启动一个新的活动并使用活动上下文,它就可以正常工作。 还有一个问题,为什么上下文让我绑定一个服务,在serviceconnected上触发了一个
,但给了我一个错误的绑定器

编辑2

因此,我可以在已连接的
服务中调用
Messenger(service)
,并通过消息进行通信。它是有效的。为什么我不能将
IBinder
转换到我的活页夹?我现在无法更改应用程序并使用消息。我需要活页夹