AbstractMethodError:AbstractMethod“;作废android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent

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

我的Android应用程序在三星的三款特定机型上出现了奇怪的生产崩溃。它抱怨我没有覆盖抽象方法
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)