AbstractMethodError:AbstractMethod“;作废android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent
我的Android应用程序在三星的三款特定机型上出现了奇怪的生产崩溃。它抱怨我没有覆盖抽象方法AbstractMethodError:AbstractMethod“;作废android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent,android,android-mediasession,Android,Android Mediasession,我的Android应用程序在三星的三款特定机型上出现了奇怪的生产崩溃。它抱怨我没有覆盖抽象方法onNewSessionEvent,这在标准Android平台中是不存在的: 这三款机型分别是Galaxy S5(AT&T和Sprint)和S6 Edge(T-mobile),都在5.x上。我没有这些设备,所以我当然不能在本地复制和排除故障 我的代码确实使用了在远程控制器上注册的OnClientUpdateListener,但这是有意义的 有什么想法吗?如中所示,AOSP的MediaControlle
onNewSessionEvent
,这在标准Android平台中是不存在的:
这三款机型分别是Galaxy S5(AT&T和Sprint)和S6 Edge(T-mobile),都在5.x上。我没有这些设备,所以我当然不能在本地复制和排除故障
我的代码确实使用了在远程控制器
上注册的OnClientUpdateListener
,但这是有意义的
有什么想法吗?如中所示,AOSP的MediaControllerCallback
(用于在棒棒糖中添加的新媒体会话API与不推荐的遥控器之间提供向后兼容性)仅实现和
似乎在这些设备上,API也在默默地“扩充”处理。不幸的是,接口的一个缺点是所有方法都必须实现,因此添加新的API通常会破坏现有的实现(参见示例)
如果要继续使用遥控器。OnClientUpdateListener
在这些棒棒糖设备上,解决方案显而易见:实现该方法。现在您知道了方法签名是什么,因此实现该方法(使用空主体)将删除此错误消息。如果有他们期望您的OnClientUpdateListener
拥有的其他方法,那么您肯定会遇到其他错误(在OnClientUpdateListener
中有很多其他方法没有反映在公共API中)。我强烈建议在再次发布应用程序之前,找一台真正的设备来测试更新的OnClientUpdateListener
另一种解决方案是使用两个单独的s—一个单独用于KitKat(并将实现OnClientUpdateListener
),另一个单独用于Lollipop及更高版本,但不会。这将允许您在棒棒糖和更高版本上使用和API(通过从中读取标记
),同时保持KitKat兼容性。幸运的是,添加此方法解决了错误。但我们从来没有能够在办公室里复制,即使是使用一部型号与其中一份坠机报告相同的手机/如何添加此方法。我尝试扩展OnClientUpdateListener和外接程序扩展接口,但具有相同的验证。你能写出正确的方法吗?@MateuszKaflowski-只需将该方法添加到你的监听器public void onClientSessionEvent(String String,Bundle Bundle){}
是的,但具体如何?如果我像下面这样创建新接口,我会出现错误“缺少控制媒体的权限”,并且使用该方法的扩展接口仍然存在该问题。RemoteController.OnClientUpdateListener myListener=new RemoteController.OnClientUpdateListener(){public void onClientSessionEvent(String,Bundle Bundle){}(重写的方法)}@MateuszKaflowski-缺少权限问题与此问题完全无关。我会用你的代码创建一个新问题
Fatal Exception: java.lang.AbstractMethodError: abstract method "void android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent(java.lang.String, android.os.Bundle)"
at android.media.RemoteController.onNewSessionEvent(RemoteController.java:1208)
at android.media.RemoteController.access$1000(RemoteController.java:61)
at android.media.RemoteController$MediaControllerCallback.onSessionEvent(RemoteController.java:851)
at android.media.session.MediaController$MessageHandler.handleMessage(MediaController.java:1073)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)