音频文件不与 mediaController 一起播放?
Posted
技术标签:
【中文标题】音频文件不与 mediaController 一起播放?【英文标题】:Audio file not playing with mediaController? 【发布时间】:2013-09-11 15:26:19 【问题描述】:尝试使用 mediacontroller 通过 url 播放音频文件
但我得到错误:
09-11 10:28:23.970:E/MediaPlayer(912):尝试调用 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
我在这里查看了各种答案,但没有解决。
我尝试在onPrepared()
中调用getDuration()
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()
将 URL 返回到声音文件(wav),它可以工作,因为如果我不实现媒体控制器,歌曲就会播放。
代码很长,请告诉我需要添加的部分。
【问题讨论】:
【参考方案1】:我自己解决了:
我添加了更多调试:
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();
然后,我没有使用 setOnPreparedListener()
设置监听器,而是在 Activity 中实现了 OnPreparedListener,如下所示:
public class TextToSpeechActivity
extends FragmentActivity implements MediaPlayerControl, OnPreparedListener
然后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();
);
然后瞧!!
【讨论】:
以上是关于音频文件不与 mediaController 一起播放?的主要内容,如果未能解决你的问题,请参考以下文章
jqgrid 不与 viewmodel 一起使用,但与 model 一起使用
php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp
GCVirtualController 不与 SKScene 一起显示