Android:尝试使用MediaPlayer播放.wav声音时出现IOException(准备失败)

时间:2017-07-26 13:12:38

标签: java android android-mediaplayer android-studio-2.1

我正在构建一个生成.wav声音文件并将其保存到外部存储空间的应用程序:

  

/storage/emulated/0/speech.wav

当我尝试打开并播放文件时出现问题。我收到此错误:

    V/MediaPlayer-JNI: native_setup
    V/MediaPlayer: constructor
    V/MediaPlayer: setListener
    E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present
    V/MediaPlayer-JNI: setAudioStreamType: 3
    V/MediaPlayer: MediaPlayer::setAudioStreamType
    V/MediaPlayer-JNI: setDataSourceFD: fd 55
    V/MediaPlayer: setDataSource(55, 0, 576460752303423487)
    V/MediaPlayer: setVideoSurfaceTexture
    V/MediaPlayer: prepare
    V/MediaPlayer: message received msg=300, ext1=0, ext2=0
    V/MediaPlayer: Received SEC_MM_PLAYER_CONTEXT_AWARE
    V/MediaPlayer: callback application
    V/MediaPlayer: back from callback
    V/MediaPlayer: message received msg=100, ext1=1, ext2=-2147483648
    E/MediaPlayer: error (1, -2147483648)
    V/MediaPlayer: signal application thread
    V/MediaPlayer: prepare complete - status=1
    W/System.err: java.io.IOException: Prepare failed.: status=0x1
    W/System.err:     at android.media.MediaPlayer._prepare(Native Method)
    W/System.err:     at android.media.MediaPlayer.prepare(MediaPlayer.java:1307)
    W/System.err:     at com.gdoldurov.lorapersonalweatherassistant.MainActivity$SynthesizeSpeech.onPostExecute(MainActivity.java:262)
    W/System.err:     at com.gdoldurov.lorapersonalweatherassistant.MainActivity$SynthesizeSpeech.onPostExecute(MainActivity.java:197)
    W/System.err:     at android.os.AsyncTask.finish(AsyncTask.java:636)
    W/System.err:     at android.os.AsyncTask.access$500(AsyncTask.java:177)
    W/System.err:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
    W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
    W/System.err:     at android.os.Looper.loop(Looper.java:135)
    W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5910)
    W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)

当我尝试在手机上打开文件时,它会显示"文件不受支持"。 但是,当我将手机连接到我的电脑(通过USB)时,我可以在电脑上打开文件,它播放得很好。

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

权限。这是我的代码:

      protected void onPostExecute(File f){
        try {
            String fn = f.getAbsolutePath();
            //AssetManager am = getAssets();
           // AssetFileDescriptor afd = am.openFd(fn);
            final MediaPlayer player = new MediaPlayer();
            FileInputStream fis = null;
            fis = new FileInputStream(f);
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setDataSource(fis.getFD());
            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    player.start();
                }
            });
            //player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            player.prepare();
            //player.start();
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();

                }
            });
            player.setLooping(false);

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

    }

0 个答案:

没有答案