我正在尝试从我的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