我正在制作音乐应用程序只是为了好玩。我可以从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。
答案 1 :(得分:0)
我认为您必须将setAudioStreamType添加到MediaPlayer
对象中。您可以在mp.setDataSource(your_URI);
之前添加此内容,如下所示
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
还有其他类型,您可以为音乐播放器选择AudioManager.STREAM_MUSIC
答案 2 :(得分:0)
我刚解决了这个问题,我只是不知道为什么会这样。我做的是按一个按钮来停止播放的音乐。我不明白它为什么会起作用,所以如果有人能解释它为什么我会感激不尽。
答案 3 :(得分:0)
通过查询 MEDIASTORE-EXTERNAL_URI 获取歌曲的路径。此字段 MEDIASTORE.AUDIO.MEDIA.DATA 将为您提供歌曲的路径(字符串为字符串) )。你可以直接将它设置为 mediaplayer.setDataSource(Your_path_from_mediastore)。它可以正常工作。