2013-04-22 225 views
1

即時製作音樂應用程序只是爲了好玩。我可以從SD卡上讀取所有音樂文件,但MediaPlayer無法播放聲音。我有文件的路徑,我通過setDataSource傳遞給媒體播放器,但沒有任何反應,我也沒有例外。這是我使用的代碼。安卓媒體播放器不會播放音頻文件

Uri songUri; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_player); 
     setUpViews(); 
     MediaPlayer mp = new MediaPlayer(); 

     try { 
      mp.setDataSource(songUri.toString()); 
      mp.prepare(); 

     } catch (IllegalArgumentException e) { 
      Toast.makeText(this, "ILLEGAL ARGUMENT EXCEPTION", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      Toast.makeText(this, "SECURITY EXCEPTION", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      Toast.makeText(this, "ILLEGAL STATE EXCEPTION", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Toast.makeText(this, "IO EXCEPTION", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
      mp.start(); 
      Log.d("URI AFTER SET UP", songUri.toString()); 
    } 

正如我之前所說的,當我打開這個活動時,我仍然得到了控制檯中的所有Log.d。媒體播放器是否還有其他配置可以播放音樂?提前致謝。

回答

0

我只是解決了這個問題,我只是不知道爲什麼它的工作原理。我所做的就是放一個按鈕來阻止正在播放的音樂。我不明白它爲什麼會起作用,所以如果有人能解釋爲什麼我會很感激。

0

setDataSource()需要路徑參數。你將整個uri作爲字符串傳遞。試試這個:

mp.setDataSource(songUri.getPath()); 
mp.prepare(); 
mp.start(); 

而且,如果你試圖訪問一個文件content:// URI,它不會工作。你必須找到文件的真正路徑,例如file:// uri。

+0

這是一個傳遞給媒體播放器/ mnt/sdcard/music/2Pac/Hail Mary.mp3的路徑我試着去適應你說的但是它不起作用。還有更多的消費嗎?謝謝 – madcoderz 2013-04-23 08:03:49

+0

它應該工作,您可以確認您的設備上的音量達到最大。 – FireAndIce 2013-04-23 09:18:00

+0

的音量是最大的。我在手機上播放了Android音樂播放器上的歌曲,它可以工作,但它不適用於我的應用程序。我把'mp.isPlaying()'這樣的if語句放在了'我真的''我不知道爲什麼沒有聲音,因爲它似乎在播放。我還有其他配置,我應該知道嗎?謝謝 – madcoderz 2013-04-23 13:45:48

0

我認爲你必須添加setAudioStreamTypeMediaPlayer對象。你可以像下面

mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

還有其他類型的mp.setDataSource(your_URI);前加上這一點,你可以選擇AudioManager.STREAM_MUSIC音樂播放器

+0

我完全是這樣做的,但它也不起作用。 – madcoderz 2013-04-23 08:09:29

0

通過查詢MEDIASTORE-EXTERNAL_URI。而本場MEDIASTORE.AUDIO.MEDIA.DATA將要給你的歌曲路徑(這是字符串)獲得歌曲的路徑。 U可以直接設置爲mediaplayer.setDataSource(Your_path_from_mediastore)。它可以正常工作。

+0

我昨天解決了這個問題,不過謝謝你的建議,我很欣賞它。 – madcoderz 2013-04-24 19:45:18