MediaMetadataRetriever를 이용해서 mp3의 아티스트 타이틀 앨범, 앨범이미지정보를 받아 화면에 뿌리려고하는데
아래와 같이 소스를 짰는데 되지를 않네요. 뭐가 문제인건지....
혹시 이 방법으로 하신분들중에 저에게 도움주실 분 안계시나요?ㅜㅠ 도와주세요 고수님들...
package com.example.customaudio;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import android.R.drawable;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
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.util.Log;
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;
String mp3_parameter;
private int currentPosition = 0;
List<String> positions = new ArrayList<String>();
@SuppressLint("NewApi")
protected String loadMp3DataFile(int i, Context context) {
String uriPath ="android.resource://" + getPackageName() + "/raw/" +
getResources().getResourceEntryName(i);
;
Uri uri = Uri.parse(uriPath);
// load data file
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(context, uri);
String artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
Log.e("artist2: ", artist);
String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
byte[] songCover = metaRetriever.getEmbeddedPicture();
if(songCover != null) {
cover.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length));
}
else {
cover.setImageResource(R.drawable.ic_launcher);
}
//return parameter
mp3_parameter = (artist + "\n" + title);
// close object
metaRetriever.release();
return mp3_parameter;
}
@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);
mediaPlayer = mediaPlayer.create(this, R.raw.officiallymissingyou);
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()));
tvTitle.setText(mp3_parameter);
}
@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;
}
}