【问题标题】:Android : Update data on car audioAndroid : 更新汽车音响数据
【发布时间】:2020-05-08 22:51:28
【问题描述】:

对不起,我的英语不好。

我做收音机播放器。我可以获得当前姓名和头衔,因此我每 15 秒阅读一次新信息并将它们显示在主要活动和通知中。当我将手机连接到我的汽车时,第一个艺术家就得到了很好的展示。当第二个到来时,我的手机上的名字是正确的,但在汽车的屏幕上没有更新。每次连接停止并重新启动时,名称都是正确的,但在下一首歌曲到来时永远不会更新。

我的班级实现了 AudioManager。

我使用此代码更新元数据:

mediaSession 是一个 MediaSessionCompat

   mediaSession.setMetadata(new MediaMetadataCompat.Builder()
    .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, strArtist)
    .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, strAlbum)
    .putString(MediaMetadataCompat.METADATA_KEY_TITLE, strTitle)
    .build()); 

我认为 mediaSession 的更新没有发送到蓝牙设备。

有强制同步的命令吗?

感谢您的帮助。

JC

【问题讨论】:

  • 嗨,你有没有得到解决方案。我也面临同样的问题。

标签: java android metadata media-player android-bluetooth


【解决方案1】:

您必须在每次轨道信息更改时调用 MediaSession.setMetadata(MediaMetadataCompat metadata)。 https://developer.android.com/guide/topics/media-apps/media-apps-overview#mediasession-and-mediacontroller 要获取元数据更改的更新,您需要注册 MediaController.Callback 以调用 MediaControllerCompat.registerCallback(ControllerCallback)。 所以当你为 MediaSession 设置新的 Metadata 时,这个 Metadata 会在 MediaController.Callback 的 onMetadataChanged(MediaMetadata 元数据)回调中收到 (https://developer.android.com/reference/android/media/session/MediaController.Callback?hl=en#onMetadataChanged(android.media.MediaMetadata)) 方法。

【讨论】:

    【解决方案2】:

    您必须在每次轨道信息更改时调用 MediaSession.setMetadata(MediaMetadataCompat metadata)。 (在 MediaSessionCompat.Callback 的 onPlay/onPause/onStop 的 mediasession 回调中调用它) https://developer.android.com/guide/topics/media-apps/audio-app/mediasession-callbacks

    【讨论】:

      【解决方案3】:

      我遇到了这个问题。问题有点。就我而言,我没有设置音乐的持续时间。并且总是只会变成 0。经过对谷歌和堆栈溢出本身的大量研究。我无法得到解决方案。但最后,我找到了它,现在它工作正常。如果你们中的一个人也面临同样的问题,请通过以下解决方案。

          private fun initMediaSessionMetadata(currentTrack: MusicModel?) {
          var duration =
              (currentTrack?.duration?.toLong() ?: mMediaPlayer?.duration?.toLong()) ?: 1000
          duration = if (duration <= 0) 1000 else duration
          val info = MediaMetadataCompat.Builder()
              .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, currentTrack?.id.toString())
              .putString(MediaMetadata.METADATA_KEY_TITLE, currentTrack?.name)
              .putString(MediaMetadata.METADATA_KEY_ARTIST, currentTrack?.artists)
              .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, currentTrack?.thumbnail)
              .putLong(MediaMetadata.METADATA_KEY_DURATION, duration)
          val metadata = info.build()
          mediaSession?.setMetadata(metadata)
      }
      

      我希望你现在能够破解它。以下行只是我的主要问题
      duration = if (duration &lt;= 0) 1000 else duration
      在此之后,我的代码运行良好。如果您有任何疑问,可以通过评论与我联系。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 1970-01-01
        • 2020-01-23
        • 2019-06-13
        • 2021-07-21
        相关资源
        最近更新 更多