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

MediaMetadataRetriever 정보가 계속 null로 찍히는데 왜 그런건가요??

0 추천
안녕하세요. 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;
 }

 

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

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...