2013-09-11 2 views
1

Попытка воспроизвести аудиофайл с помощью URL с MediaControllerАудиофайл не воспроизводится с mediaController?

Но я получаю сообщение об ошибке:

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

Я смотрел различные ответы здесь на SO, но не решить. я пытаюсь вызова 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() возвращает URL в SoundFile (WAV), это работает, потому что песня играет, если я не реализовать контроллер медиа. Код длинный, поэтому дайте мне знать, какую часть мне нужно добавить.

ответ

0

мне удалось решить ее myslef:

Я добавил больше отладки:

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(); 
} 

Тогда вместо установки listenner с помощью setOnPreparedListener() я реализовал 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(); 
     } 
    }); 
    } 

и Voila !!