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

Hassene我是Amara

我正在实现一个服务,并且在此服务之上有一个包装类,该包装类在本地绑定到它。现在,当我将服务导出为jar并从另一个应用程序链接到它时(此应用程序实例化wrapper类)。当我运行应用程序时,我得到的是ClassCastException:android.os.BinderProxy无法由包装类中的本地绑定引起的强制转换为xxx $ LocalBinder:

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

此处的活页夹的类型是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)

一切正常,但显然我想设置另一个软件包名称。有什么方法可以重新设计或进行这项工作吗?

谢谢!

扎伊德·贾拉勒(Zaid Jalal)

看到这个

如果您的服务仅由本地应用程序使用,并且不需要跨进程工作,则可以实现自己的Binder类,该类可为客户端提供对服务中公共方法的直接访问。

注意:仅当客户端和服务位于同一应用程序和进程中(这是最常见的)时,此方法才有效。例如,这对于需要将活动绑定到自己的在后台播放音乐的服务的音乐应用程序来说效果很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android

java.lang.ClassCastException:android.app.ContextImpl无法在ImageButton Android上强制转换为“活动”

java.lang.ClassCastException:android.os.ResultReceiver无法转换为com.hello.utils.network.MyReciever

Android HashMap java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.util.Map $ Entry

Android java.lang.ClassCastException:无法将android.widget.LinearLayout $ LayoutParams强制转换为android.widget.AbsListView $ LayoutParams

获取java.lang.ClassCastException:无法将android.widget.FrameLayout $ LayoutParams强制转换为android.widget.RelativeLayout $ LayoutParams

java.lang.ClassCastException:无法将android.widget.RelativeLayout强制转换为android.widget.TabHost

每次我声明并运行两个服务时都获取java.lang.ClassCastException:android.os.BinderProxy

java.lang.RuntimeException:java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.String

java.lang.ClassCastException:无法将Z强制转换为java.lang.String

ClassCastException:无法将java.lang.Object强制转换为java.lang.Integer

java.lang.ClassCastException:无法将java.lang.Object []强制转换为

ClassCastException java.lang.Long无法强制转换为clojure.lang.IFn

Android-java.lang.ClassCastException:android.widget.LinearLayout无法转换为android.widget.FrameLayout

java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.lang.Double

原因:java.lang.ClassCastException:无法将java.lang.Class强制转换为java.lang.reflect.ParameterizedType

java.lang.ClassCastException:无法将java.lang.Double强制转换为java.lang.String

创建RDD [LabeledPoint]:java.lang.ClassCastException:无法将java.lang.Long强制转换为java.lang.Double

java.lang.ClassCastException:无法将java.lang.String强制转换为java.lang.Double

休眠:java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.lang.Double

错误:java.lang.ClassCastException:android.view.View无法转换为android.view.ViewGroup

java.lang.ClassCastException:android.widget.ImageButton无法转换为android.widget.TextView

java.lang.ClassCastException:无法将Model.Film强制转换为java.util.List

Android 文本注释 java.lang.ClassCastException:java.lang.String 无法转换为 android.text.SpannedString

Hibernate HQL强制转换java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.lang.Long

如何修复:java.lang.ClassCastException:无法将java.util.ArrayList强制转换为java.lang.Integer

java.lang.ClassCastException:使用Univocity时无法将java.util.Date强制转换为java.lang.String

java.lang.ClassCastException:无法将java.util.Arrays $ ArrayList强制转换为java.lang.Integer