我正在构建一个生成.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();
}
}