首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AbstractMethodError:抽象方法"void android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent“

AbstractMethodError:抽象方法"void android.media.RemoteController$OnClientUpdateListener.onClientSessionEvent“
EN

Stack Overflow用户
提问于 2015-12-18 17:01:44
回答 1查看 2.3K关注 0票数 3

我的Android应用程序在三星三款手机上的生产出现了一次奇怪的崩溃。它在抱怨我没有覆盖抽象方法onNewSessionEvent,它不存在于标准的Android平台:http://developer.android.com/reference/android/media/RemoteController.OnClientUpdateListener.html

代码语言:javascript
运行
复制
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)

这三款车型分别是Galaxy S5 (AT&T和Sprint)和S6 Edge (),它们都在5.x上。我没有这些设备,所以我当然不能在本地复制和排除故障。

我的代码确实使用了在OnClientUpdateListener上注册的RemoteController,但这是合理的。

有什么想法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2015-12-18 17:52:15

RemoteController源代码中可以看出,AOSP的MediaControllerCallback (用于在Lollipop中添加的新媒体会话API与不推荐的RemoteController之间提供向后兼容性)只实现onPlaybackStateChanged()onMetadataChanged()

在这些设备上,API似乎也被悄悄地“增强”了,试图处理onSessionEvent()。不幸的是,接口的一个缺点是必须实现所有方法,因此添加新API通常会破坏现有的实现(参见ComponentCallbacks2中的一个例子)。

如果您想继续在这些Lollipop设备上使用RemoteController. OnClientUpdateListener,那么解决方案是显而易见的:实现该方法。现在您已经知道了方法签名是什么,所以实现该方法(使用一个空的主体)将删除此错误消息。如果有其他方法希望您的OnClientUpdateListener有其他方法,您肯定会遇到额外的错误(在MediaController.Callback中有很多额外的方法没有反映在OnClientUpdateListener中的公共API中)。在再次发布应用程序之前,我强烈建议您找到一个真正的设备来测试您更新的OnClientUpdateListener

另一种解决方案是使用两个单独的NotificationListenerService--一个单独用于KitKat (并将实现OnClientUpdateListener),另一个单独用于Lollipop及更高级别,而后者则不会。这将允许您在Lollipop和更高版本上使用棒棒糖媒体播放控制APIMediaController API(通过从会议读取Token ),同时保持KitKat兼容性。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34360478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档