[英]Audio file not playing with mediaController?
Trying to play an audio file via url with mediacontroller 尝试使用MediaController通过URL播放音频文件
But I get error: 但是我得到了错误:
09-11 10:28:23.970: E/MediaPlayer(912): Attempt to call getDuration without a valid mediaplayer 09-11 10:28:23.970: E/MediaPlayer(912): error (-38, 0) 09-11 10:28:23.990: E/MediaPlayer(912): Attempt to perform seekTo in wrong state: mPlayer=0x5d425340, mCurrentState=0
09-11 10:28:23.970:E / MediaPlayer(912):尝试在没有有效Mediaplayer的情况下调用getDuration 09-11 10:28:23.970:E / MediaPlayer(912):错误(-38,0)09-11 10:28:23.990:E / MediaPlayer(912):尝试在错误状态下执行seekTo:mPlayer = 0x5d425340,mCurrentState = 0
I looked various answers here on SO, but did not solve. 我在SO上找到了各种答案,但没有解决。 I try calling
getDuration()
in onPrepared()
我尝试调用
getDuration()
在onPrepared()
mMediaPlayer = new MediaPlayer();
mMediaController = new MediaController(this);
mMediaController.setMediaPlayer(TextToSpeechActivity.this);
mMediaController.setAnchorView(findViewById(R.id.audioView));
try {
mMediaPlayer.setDataSource(getSoundUrl());
mMediaPlayer.prepare();
} catch (IOException e) {
Log.e("PlayAudioDemo", "Could not open file for playback.", e);
}
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mHandler.post(new Runnable() {
public void run() {
//did not help
int duration = mMediaPlayer.getDuration();
mMediaController.show(10000);
mMediaPlayer.start();
}
});
}
});
getSoundUrl()
returns the URL to the soundfile(wav), it works because the song plays if I dont implement the media controller. getSoundUrl()
将URL返回到getSoundUrl()
wav),它可以工作,因为如果不实现媒体控制器,则歌曲会播放。 Code is lengthy , so let me know which part I need to add. 代码很长,所以让我知道我需要添加哪一部分。
I managed to solved it myslef: 我设法解决了myslef:
I added more debugging: 我添加了更多调试:
try {
mMediaPlayer.setDataSource(getSoundUrl());
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Then instead of setting the listenner using setOnPreparedListener()
I implemented OnPreparedListener in the Activity instead like this: 然后,不是使用
setOnPreparedListener()
设置setOnPreparedListener()
,而是在Activity中实现了OnPreparedListener,如下所示:
public class TextToSpeechActivity
extends FragmentActivity implements MediaPlayerControl, OnPreparedListener {
Then onPrepared()
: 然后
onPrepared()
:
public void onPrepared(MediaPlayer mediaPlayer) {
Log.d("mylog", "onPrepared");
mMediaController.setMediaPlayer(this);
mMediaController.setAnchorView(findViewById(R.id.audioView));
mHandler.post(new Runnable() {
public void run() {
mMediaController.setEnabled(true);
mMediaController.show();
}
});
}
and Voila!! 和瞧!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.