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

MediaMetadataRetriever를 이용해서 mp3의 아티스트, 타이틀 정보를 받을 때 어떻게 하나요?

0 추천
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;
 }

 

}
wonie86 (300 포인트) 님이 2013년 4월 30일 질문

1개의 답변

0 추천

http://developer.android.com/intl/ko/reference/android/media/MediaMetadataRetriever.html

String extractMetadata(int keyCode)
Call this method after setDataSource().
int METADATA_KEY_ARTIST The metadata key to retrieve the information about the artist of the data source.

sample; http://xjaphx.wordpress.com/tag/mediametadataretriever/

 

int METADATA_KEY_TITLE The metadata key to retrieve the data source title.

 

aucd29 (218,390 포인트) 님이 2013년 4월 30일 답변
...