gpt4 book ai didi

android - AbstractMethodError : abstract method "void android. 媒体.RemoteController$OnClientUpdateListener.onClientSessionEvent

转载 作者:太空狗 更新时间:2023-10-29 13:16:19 25 4
gpt4 key购买 nike

我的 Android 应用在三款特定的三星机型上生产时遇到奇怪的崩溃。它提示我没有重写抽象方法 onNewSessionEvent,标准 Android 平台中不存在该方法: http://developer.android.com/reference/android/media/RemoteController.OnClientUpdateListener.html

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(T-mobile),均基于 5.x。我没有这些设备,所以我当然无法在本地重现和排除故障。

我的代码确实使用了在 RemoteController 上注册的 OnClientUpdateListener,但仅此而已。

有什么想法吗?

最佳答案

RemoteController source code 中所示, AOSP 的 MediaControllerCallback(用于在 Lollipop 中添加的新媒体 session API 与已弃用的 RemoteController 之间提供向后兼容性)仅实现 onPlaybackStateChanged()onMetadataChanged() .

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

如果你想继续使用RemoteController。 OnClientUpdateListener 在这些 Lollipop 设备上,解决方案很明显:实现该方法。您现在知道方法签名是什么,因此实现该方法(使用空主体)将删除此错误消息。如果他们希望您的 OnClientUpdateListener 具有其他方法,您肯定会遇到其他错误(MediaController.Callback 中有很多其他方法未反射(reflect)在 OnClientUpdateListener 的公共(public) API 中)。我强烈建议您在再次发布应用程序之前找一个真实的设备来测试更新后的 OnClientUpdateListener

另一种解决方案是使用两个单独的 NotificationListenerService s - 一个单独用于 KitKat(并将实现 OnClientUpdateListener),另一个用于 Lollipop 及更高版本则不会。这将允许您使用 Lollipop media playback control APIsMediaController Lollipop 及更高版本的 API(通过读取 EXTRA_MEDIA_SESSION 中的 Token)同时保持 KitKat 兼容性。

关于android - AbstractMethodError : abstract method "void android. 媒体.RemoteController$OnClientUpdateListener.onClientSessionEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com