안녕하세요. MediaMetadataRetriever를 이용해서 mp3파일정보를 얻어오려고하는데요.
계속 null값이 찍혀서 문제네요. mp3의 커버사진같은경우는 잘 받아오는데 타이틀,아티스트,앨범같은 스트링 정보를 계속 못받아오는지 null로 찍혀버려요. 문제가 뭔지 도통 모르겠네요.
어디가 문제인지 정확히 몰라 코드전체 올립니다. 어디가 잘못됬는지 알려주세요ㅜㅠ...
package com.example.customaudio;
import java.text.SimpleDateFormat;
import android.R.drawable;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class CustomAudio extends Activity {
MediaPlayer mediaPlayer;
SeekBar theSeekbar, sbVol;
TextView tvNow, tvEnd, tvTitle;
ImageButton StartButton, NextButton, PrevButton;
ImageView cover;
@TargetApi(10)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_audio);
StartButton = (ImageButton) this.findViewById(R.id.startbutton);
NextButton = (ImageButton) this.findViewById(R.id.nextbutton);
PrevButton = (ImageButton) this.findViewById(R.id.prevbuuton);
theSeekbar = (SeekBar) this.findViewById(R.id.seekBar);
tvNow = (TextView) this.findViewById(R.id.textView1);
tvEnd = (TextView) this.findViewById(R.id.textView2);
tvTitle = (TextView) this.findViewById(R.id.textView3);
sbVol = (SeekBar) this.findViewById(R.id.seekBar1);
cover = (ImageView) findViewById(R.id.imageView1);
Uri uri=Uri.parse("android.resource://com.example.customaudio/"+R.raw.gentleman);
mediaPlayer = mediaPlayer.create(this, uri);
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(getApplicationContext(), uri);
String out; // get mp3 info
String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String artist= metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String album= metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
out=(title + "\n" + artist + "\n" + album);
byte[] songCover = metaRetriever.getEmbeddedPicture();
if(songCover != null) {
cover.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length));
}
else {
cover.setImageResource(R.drawable.ic_launcher);
}
metaRetriever.release();
tvTitle.setText(out);
final SimpleDateFormat format = new SimpleDateFormat("mm:ss");
final AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
int sMax = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int svol = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
StartButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int current = mediaPlayer.getCurrentPosition();
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
StartButton.setImageResource(drawable.ic_media_play);
}
else if (!mediaPlayer.isPlaying()) {
mediaPlayer.seekTo(current);
mediaPlayer.start();
StartButton.setImageResource(drawable.ic_media_pause);
}
}
});
PrevButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int current = mediaPlayer.getCurrentPosition();
if (current - 10000 < 0) {
mediaPlayer.seekTo(0);
} else {
mediaPlayer.seekTo(current - 10000);
}
}
});
NextButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int current = mediaPlayer.getCurrentPosition();
int total = mediaPlayer.getDuration();
if (current + 10000 > total) {
mediaPlayer.seekTo(total);
} else {
mediaPlayer.seekTo(current + 10000);
}
}
});
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (mediaPlayer != null) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
if (mediaPlayer.isPlaying()) {
theSeekbar.post(new Runnable() {
@Override
public void run() {
int current = 0;
// TODO Auto-generated method stub
current = mediaPlayer.getCurrentPosition();
theSeekbar.setProgress(current);
}
});
}
}
}
}).start();
theSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
mediaPlayer.seekTo(progress);
theSeekbar.setProgress(progress);
int min = progress / 60000;
int sec = (progress % 60000) / 1000;
if (sec < 10) {
tvNow.setText("0" + min + " : " + "0" + sec);
} else {
tvNow.setText("0" + min + " : " + sec);
}
}
});
sbVol.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
audio.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
}
});
theSeekbar.setVisibility(ProgressBar.VISIBLE);
theSeekbar.setProgress(0);
sbVol.setMax(sMax);
sbVol.setProgress(svol);
theSeekbar.setMax(mediaPlayer.getDuration());
tvEnd.setText(format.format(mediaPlayer.getDuration()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.custom_audio, menu);
return true;
}
}