Android媒体播放器不会播放音频文件

时间:2013-04-22 14:41:49

标签: java android android-mediaplayer

我正在制作音乐应用程序只是为了好玩。我可以从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。是否还有媒体播放器播放音乐的配置?提前谢谢。

4 个答案:

答案 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)。它可以正常工作。