我正在尝试从我的android应用中播放.opus媒体文件(目标是5.0+)。该文件的来源是设备外部存储。

MediaPlayer不断抛出“ java.io.IOException:准备失败。:status = 0x1”。
请注意,我能够播放mp3和aac等其他文件类型

注意:已授予READ_EXTERNAL_STORAGE权限。

先感谢您。

下面的代码位于Android Fragment中:

    public void playVoiceNote(VoiceNoteBO voiceNoteBO){
    try{

        Uri myUri = Uri.fromFile(new File(voiceNoteBO.getFileName()));  //this resolves to the full path of the file.

        MediaPlayer mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(getActivity().getApplicationContext(), myUri);
        mediaPlayer.prepare();
        mediaPlayer.start();

    }catch(Exception e){
        //TODO
        e.printStackTrace();

    }
}


和堆栈跟踪:

06-04 18:31:46.129 1134-27920 /? E / GenericSource:无法从数据源初始化!
06-04 18:31:46.129 27425-27443 /? E / MediaPlayer:错误(1,-2147483648)
06-04 18:31:46.129 27425-27425 /? W / System.err:java.io.IOException:准备失败。:status = 0x1
06-04 18:31:46.130 27425-27425 /? W / System.err:位于android.media.MediaPlayer._prepare(本机方法)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于android.media.MediaPlayer.prepare(MediaPlayer.java:1135)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于com.frankyapps.privateread.prws.fragments.VoiceNotesFragment.playVoiceNote(VoiceNotesFragment.java:166)
06-04 18:31:46.130 27425-27425 /? W / System.err:at com.frankyapps.privateread.prws.fragments.VoiceNotesFragment $ 1.onClick(VoiceNotesFragment.java:76)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于com.frankyapps.privateread.prws.fragments.VoiceNotesFragment $ RecyclerTouchListener.onInterceptTouchEvent(VoiceNotesFragment.java:217)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于android.support.v7.widget.RecyclerView.dispatchOnItemTouch(RecyclerView.java:2261)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2389)
06-04 18:31:46.130 27425-27425 /? W / System.err:位于android.view.View.dispatchTouchEvent(View.java:8471)

最佳答案

尝试使用create()方法创建MediaPlayer对象。
这是您可以执行的操作:

MediaPlayer mediaPlayer = MediaPlayer.create(context, myUri);
mediaPlayer.start();


无需调用prepare()方法(如果您使用create()实例化MediaPlayer对象),因为prepare()将由create()隐式调用。

该链接肯定会帮助您:https://developer.android.com/reference/android/media/MediaPlayer.html

10-01 20:59