Android MediaSessionCompat onMediaButtonEvent 不工作

Android MediaSessionCompat onMediaButtonEvent not working

我希望能够检测到何时按下头座上的暂停按钮(当没有播放媒体时)

我尝试了各种接收器和服务,但没有任何效果。直到我测试了从一个非常古老的示例中删除所有膨胀后得到的代码。

import android.content.ComponentName
import android.content.Intent
import android.os.Bundle
import android.support.v4.media.session.MediaSessionCompat
import androidx.appcompat.app.AppCompatActivity
import androidx.media.session.MediaButtonReceiver


class MainActivity : AppCompatActivity() {
    private lateinit var mMediaSessionCompat: MediaSessionCompat
    private val mMediaSessionCallback: MediaSessionCompat.Callback = object : MediaSessionCompat.Callback() {
        override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean {
            println("WORKS!!!")
            return super.onMediaButtonEvent(mediaButtonEvent)
        }
    }

    private fun initMediaSession() {
        val mediaButtonReceiver = ComponentName(applicationContext, MediaButtonReceiver::class.java)
        mMediaSessionCompat = MediaSessionCompat(applicationContext, "Tag", mediaButtonReceiver, null)
        mMediaSessionCompat.setCallback(mMediaSessionCallback)
        mMediaSessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
        mMediaSessionCompat.isActive = true
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initMediaSession()
        setContentView(R.layout.activity_main)
    }

    override fun onDestroy() {
        super.onDestroy()
        mMediaSessionCompat.release()
    }
}

此代码工作了一段时间,但由于某种原因在其他项目中不起作用,并且在重新启动后此代码不再有效。我不知道为什么它停止工作,但我已经尝试让它工作几个小时,但我不明白为什么它不会工作。谁能给我一个最小的可重现的例子,或者指出我缺少的东西。

我通过简单地播放虚拟声音解决了这个问题

private fun playDummySound() {
    val mMediaPlayer: MediaPlayer = MediaPlayer.create(this, R.raw.dummy_sound_500ms)
    mMediaPlayer.setOnCompletionListener { mMediaPlayer.release() }
    mMediaPlayer.start()
}

取自https://github.com/anars/blank-audio

问题已通过

中的解决方案解决