1

Android アプリ (5.0 以降を対象) から .opus メディア ファイルを再生しようとしています。このファイルのソースは、デバイスの外部ストレージです。

MediaPlayer は "java.io.IOException: Prepare failed.: status=0x1" をスローし続けます。mp3やaacなどの他のファイルタイプを再生できることに注意してください

注: READ_EXTERNAL_STORAGE 権限は既に付与されています。

前もって感謝します。

Androidフラグメント内にある私のコードの一部の下:

    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: 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) で
4

1 に答える 1

1

MediaPlayer オブジェクトの作成には create() メソッドを使用してみてください。これはあなたがそれを行う方法です:

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

prepare() メソッドを呼び出す必要はありません (create() を使用して MediaPlayer オブジェクトをインスタンス化する場合)。prepare() は create() によって暗黙的に呼び出されるためです。

このリンクは確かに役立ちます: https://developer.android.com/reference/android/media/MediaPlayer.html

于 2016-06-04T20:06:53.997 に答える