如何修复“找不到媒体按钮接收器”异常

Sim*_*mon 2 android android-mediaplayer android-mediasession

我正在构建媒体播放器,并希望处理来自“播放”、“暂停”等通知的操作。在我的活动中,我注册了MediaButtonReceiver

registerReceiver(MediaButtonReceiver(), IntentFilter(Intent.ACTION_MEDIA_BUTTON))
Run Code Online (Sandbox Code Playgroud)

并创建了媒体通知

val builder: NotificationCompat.Builder = MediaStyleHelper.from(this, mediaSession!!)
builder.addAction(
                NotificationCompat.Action(
                        android.R.drawable.ic_media_previous,
                        "Previous",
                        MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
                )
        )
Run Code Online (Sandbox Code Playgroud)

但是当我按下媒体通知上的操作按钮时,没有任何反应。当我添加这些动作时,执行

MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
Run Code Online (Sandbox Code Playgroud)

打印到控制台警告

“W/MediaButtonReceiver:在给定的上下文中找不到唯一的媒体按钮接收器,因此无法构建待处理的意图。”

但是,如果我以编程方式注册了它,为什么它没有注册?

小智 9

在使用MediaButtonReceiver函数之前,您需要按照文档中的说明将其添加到清单中:

<receiver android:name="androidx.media.session.MediaButtonReceiver" >
  <intent-filter>
    <action android:name="android.intent.action.MEDIA_BUTTON" />
  </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用 AndroidX 库,则需要使用旧的类名: android.support.v4.media.session.MediaButtonReceiver