我正在尝试创建一个非常简单的应用程序 - 一个在线广播播放器,我想获取当前正在播放的歌曲的名称。这是代码:
player = new ExoPlayer.Builder(this).build();
viewPlayer.setPlayer(player);
MediaItem mediaItem = MediaItem.fromUri(link);
player.setMediaItem(mediaItem);
player.prepare();
player.play();
player.addListener(
new Player.Listener() {
@Override
public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
metadata = player.getMediaMetadata();
if (metadata.title!=null) {
MainActivity.this.title = metadata.albumTitle.toString();
viewSong.setText(MainActivity.this.title);
} else viewSong.setText("NULL");
}
}
);
我想,我拥有 build.gradle 中所需的所有依赖项。
播放器工作正常,但
getMediaMetadata()
给了我这个(在调试模式下):
metadata = {MediaMetadata@11693}
albumArtist = null
albumTitle = null
artist = null
..............
..............
genre = Rock Music
..............
..............
station = RADIO 1 ROCK
有一些数据,但我需要的是“空”。
我还没有找到这个问题的相关答案。
看起来您没有在任何地方添加“标题”,这就是为什么您得到“NULL”值作为输出。您可以使用下面的代码添加标题或从 MediaMetadata 获取标题或任何其他信息。
//Add required info into mediaMetadata
val mediaMetadata = MediaMetadata.Builder()
.setDisplayTitle("Your title here")
.setArtist("Your artist name")
.build()
//Build mediaItem with data added and url of media
val mediaItem = MediaItem.Builder()
.setMediaMetadata(mediaMetadata)
.setUri("Your track URL here")
mediaItem.build()
//Now add this mediaItem into your code like this
player.setMediaItem(mediaItem);
player.prepare();
player.play();
//Now in listener
player.addListener(new Player.Listener() {
@Override
public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
//Now get posted values like this
println("Title : "+mediaMetadata.displayTitle)
}
}
);
您可以在 MediaMetadata Builder 中找到更多有用的方法,例如 setAlbumTitle、setAlbumArtist、setSubtitle、setDescription、setUserRating 等。
还有一件事,我认为你的代码是 Java 的,但我一开始的代码是 Kotlin 的,所以在使用之前将其转换为 Java 。