마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

오디오플레이어 개발 중인데 앨범 이미지와 아티스트 받아오는 법에 대해 질문입니다.

0 추천
안녕하세요. 오디오플레이어를 직접 만들어보려고 하는 학생인데요.

파일의 커버이미지하고 타이틀 아티스트에 대한 정보를 받아오지를 못하겠네요.

뭐가 잘못된건지를 잘 모르겠어서 여기에 글올려봅니다. 고수님들 소스보시고 잘못된 곳이 어디인지 도와주세요.ㅠㅜ

package com.example.customaudio;

import java.text.SimpleDateFormat;

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.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
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;

@SuppressLint("NewApi")
protected String loadMp3DataFile(int i, Context context) {

String uriPath = "android.resource://com.example.customaudio/raw/gentleman.mp3";
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.gentleman);

final SimpleDateFormat format = new SimpleDateFormat("H: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;
}

}

이게 소스내용의 전부입니다. 어디가 잘못된 걸까요? 답답하네요...ㅠㅜ
wonie86 (300 포인트) 님이 2013년 4월 30일 질문

1개의 답변

0 추천

 

 
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
ContentResolver res = context.getContentResolver();
InputStream in = res.openInputStream(uri);
Bitmap artwork = BitmapFactory.decodeStream(in);
aucd29 (218,390 포인트) 님이 2013년 4월 30일 답변
...