您如何从MediaPlayer获取艺术家和歌曲名称? [英] how do you get the artist and song title from MediaPlayer?

查看:416
本文介绍了您如何从MediaPlayer获取艺术家和歌曲名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为在线广播电台构建一个简单的应用程序.我使用此代码来使用MediaPlayer来播放电台.它很好地解决了一个问题.我不知道该如何向听众展示他们实际上在听什么. 我的代码:

I'm building a simple app for an online radio station. I using this code to use the MediaPlayer to stream the station. It works great with one problem. I don't know how to show the listener what they're actually listening too. My code:

package com.xxxx.android;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

@SuppressWarnings("unused")
public class MainActivity extends Activity implements OnClickListener {

private final static String RADIO_STATION_URL = "http://";
private Button buttonPlay;
private Button buttonStopPlay;
private MediaPlayer player;
private TextView showdisplay;
private String strInfo; 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);    

initializeUIElements();

initializeMediaPlayer();       
}    

private void initializeUIElements() {
buttonPlay = (Button) findViewById(R.id.buttonPlay);
buttonPlay.setOnClickListener(this);

buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay);
buttonStopPlay.setEnabled(false);
buttonStopPlay.setOnClickListener(this);
showdisplay = (TextView) findViewById(R.id.lblDisplay);
}

public void onClick(View v) {
if (v == buttonPlay) {
    startPlaying();
} else if (v == buttonStopPlay) {
    stopPlaying();
}
}

private void startPlaying() {
buttonStopPlay.setEnabled(true);
buttonPlay.setEnabled(false);
showdisplay.setText("Buffering..");        

player.prepareAsync();

player.setOnPreparedListener(new OnPreparedListener() {

    public void onPrepared(MediaPlayer mp) {
        player.start(); 
    }   
});
}

private void stopPlaying() {
if (player.isPlaying()) {
    player.stop();
    player.release();
    initializeMediaPlayer();
}

buttonPlay.setEnabled(true);
buttonStopPlay.setEnabled(false); 
}

private void initializeMediaPlayer() {
player = new MediaPlayer();
try {
    player.setDataSource(RADIO_STATION_URL);
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (IllegalStateException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

    public void onBufferingUpdate(MediaPlayer mp, int percent) {
       Log.i("Buffering", "" + percent);
    }
});       
}

@Override
protected void onPause() {
super.onPause();
if (player.isPlaying()) {
    player.stop();
}
}   

如何...具体地,并且详细地...如何使用MediaPlayer广播流中的艺术家和歌曲标题来更新Textview"showdisplay"?

How...specifically..and in great detail...do I update the Textview "showdisplay" with the artist and song title coming down from the radio stream in MediaPlayer?

谢谢

推荐答案

快速研究告诉我android.media.MediaPlayer只关心流数据,而无所谓.因此,如果您还想检索流的元数据(电台名称,艺术家,歌曲等),则必须使用不同的对象分别进行处理.

Quick research tells me that android.media.MediaPlayer only cares about stream data and nothing else. Therefore, if you want to also retrieve the stream's metadata (the station name, artist, song, etc.), you must do it separately, using a different object.

android.media.MediaMetadataRetreiver类似乎恰好可以做到这一点.看来您应该研究MetadataRetreiver.extractMetadata()函数以及METADATA_KEY_ARTISTMETADATA_KEY_TITLE键.

The android.media.MediaMetadataRetreiver class seems to be built to do exactly that. It looks like you should research the MetadataRetreiver.extractMetadata() function along with the METADATA_KEY_ARTIST and METADATA_KEY_TITLE keys.

这里是 MediaMetadataRetreiver API .另外,请查看之前的StackOverflow问题.

Here is the MediaMetadataRetreiver API. Also, look at this previous StackOverflow question.

我不是Android开发人员,所以我无法保证我的代码正确无误,但我认为它看起来像这样:

I am not an Android developer so I cannot guarentee my code is correct but I think it looks something like this:

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetreiver.setDataSource(RADIO_STATION_URL)
String artist =  metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

(完整披露:从此处修改的代码)

(Full disclosure: code modified from here)

这篇关于您如何从MediaPlayer获取艺术家和歌曲名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆