音频文件不与 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 一起显示

TranslationY 动画不与 TransitionManager 一起播放

立即执行不与 select into 一起使用

公共固定是 iOS 不与 Alamofire 一起使用