2013-03-11 2 views
0

원시 디렉토리에 두 개의 MP3 파일이 있습니다.MediaMetadataRetriever는 항상 동일한 메타 데이터를 표시합니다.

2 개의 mp3 파일 중 하나를 무작위로 선택하여 재생하기 시작하면 노래의 메타 정보 (아티스트 및 제목)가 표시됩니다. 그러나 buttom을 다시 누르고 다른 노래가 연주되기 시작하면 메타 데이터는 (첫 번째 노래의) 여전히 동일합니다. 노래가 변경되면 변경되지 않습니다. 내 코드는 다음과 같습니다.

public class MainActivity extends Activity { 

Button playList_Black; 
TextView textView; 
MediaPlayer mp; 
ImageView cover; 
Random r = new Random(); 

int [] playlist_Black = {R.raw.music_a, R.raw.music_b}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    playList_Black = (Button)findViewById(R.id.btn_black); 
    textView = (TextView)findViewById(R.id.textView1); 
    cover = (ImageView)findViewById(R.id.imageView1); 
} 

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

    String mp3_parameter; 

    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; 
} 

public void PlayMusic(int playlist) { 

    if(mp != null) { 
     if(mp.isPlaying()){ 
     mp.stop(); 
     mp.reset(); 
     mp = MediaPlayer.create(getApplicationContext(), playlist); 
     try { 
      mp.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     mp.start(); 
     } 
     else if(mp.isPlaying() == false) { 
      mp = MediaPlayer.create(getApplicationContext(), playlist); 
      mp.start(); 
     } 
    } 
    else { 
    mp = MediaPlayer.create(getApplicationContext(), playlist); 
    mp.start(); 
    } 
} 

public void PlaylistBlack(View v) { 

    int i = playlist_Black[r.nextInt(playlist_Black.length)]; 
    textView.setText(loadMp3DataFile(i, getApplicationContext())); 
    Log.e("Ausgabe: ", "" + i); 
    Log.e("Ausgabe: ", "" + getResources().getResourceEntryName(i));  
    PlayMusic(i); 
} 

내가 뭘 잘못하고 있니? 모든 해결책과 조언? 미리 감사드립니다.

+0

추가 자료 : 코드가 정확하며 에뮬레이터에서 제대로 작동합니다. 하지만 내 스마트 폰에서 프로젝트를 실행할 때, 나는 위에서 언급 한 문제가있다. 동일한 문자열 만 표시합니다. 내가 무엇을 할 수 있을지? – user1953173

답변

0

코드가 정확하며 에뮬레이터에서 제대로 작동합니다. 하지만 내 스마트 폰에서 프로젝트를 실행할 때, 나는 위에서 언급 한 문제가있다. 그것은 노래의 동일한 메타 정보만을 보여줍니다. 스마트 폰에서 모든 솔루션을 사용할 수 있습니까?

관련 문제