2013-03-11 84 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 2013-03-13 08:11:13

回答

0

該代碼是正確的,它在模擬器上正常工作。但是當我在智能手機上運行該項目時,我遇到了上述問題。它只顯示一首歌曲的相同元信息。任何解決方案,在智能手機上工作?