1

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

ここ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 をサウンドファイル (wav) に返します。これは、メディア コントローラーを実装しなくても曲が再生されるため機能します。コードが長いので、追加する必要がある部分を教えてください。

4

1 に答える 1

0

私はそれを自分で解決することができました:

さらにデバッグを追加しました:

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()のようにアクティビティに 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();
      }
    });
  }

そして出来上がり!

于 2013-09-11T16:27:00.047 に答える