2016-07-26 10 views
0

Androidでmediaplayer機能を使用しています。基本的には生のフォルダに曲がありますが、新しいトラックに変更したいだけですが失敗します。 1つの音楽ファイルが再生され、その後、ランダム再生にスキップするために、音楽再生の後または途中でボタンを押しますが、失敗します。Android Mediaplayer Selecttrackメソッドが失敗する

現在のコード

mediaplayer.stop(); 
try { 
     mediaplayer.prepareAysn(); 
     mediaPlayer.selectTrack(randomtrack_num - 1); 

    } 
    catch(Exception e){} 
mediaplayer.start(); 

I受信エラー:

  • MediaPlayerの:状態で呼び出さ開始64

  • MediaPlayerの:エラー(-38、0)

  • MediaPlayer:エラー(-38,0)

私はmediaplayer.stop()を使わずに試してみましたが、最後にmediaplayer.start()を含めて、同じトラックをもう一度再生します。

何か不足していますか? お知らせください。

私はこれが唯一の私はそれが動作するはずです、私の第二のアプローチでは想定し準備状態で行うことができますが、それはないです実現した文書を読んだ後第二のアプローチ

mediaPlayer.stop(); 

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){ 

     @Override 
     public void onPrepared(MediaPlayer mp) { 

      try{ 
       mp.selectTrack(randomtrack_num - 1); 

       }catch(Exception e){} 

      mp.start(); 

     } 
    }); 
    mediaPlayer.prepareAsync(); 

私はこのエラーを取得する:/ MediaPlayerの:字幕コントローラはすでに を設定しておく必要があり、基本的に同じトラックを再び再生し、それが選択されたトラックには行きません。

答えて

1

mediaplayer.start()は間違った状態です。まず、このドキュメントを読む:

https://developer.android.com/reference/android/media/MediaPlayer.html

あなたは正しい実装のより良いアイデアを持っています。

EDITED:補完

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
@Override 
public void onCompletion(MediaPlayer mp) 
{ 

    myMediaPlayer.reset(); 
    /* load the new source */ 
    myMediaPlayer.setDataSource(url[position]);//select the path according to your need 
    /* Prepare the mediaplayer */ 
    myMediaPlayer.prepareAsync(); 

}

+0

後の異なるトラックを再生

String[] url ; // initiliaze your URL array here MediaPlayer myMediaPlayer = new MediaPlayer(); myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { myMediaPlayer.setDataSource(url[0]); myMediaPlayer.prepareAsync(); // might take long! (for buffering, etc) } catch (IOException e) { Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } //mp3 will be started after completion of preparing... myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer player) { player.start(); } }); 

Iは(mediaplayer.prepareAysncを加えました)。試してキャッチフィールドの内側。まだ別のトラックには行かない。しかし、私はこのエラーを受け取ります。 "E/MediaPlayer:サブタイトルコントローラが既に設定されている必要があります。" – akalanta

+0

setOnPreparedListener()を使用して2回目の試行を行いましたが、この問題を解決できません。 – akalanta

+0

上記の答えで.selecttrack()メソッドはどこにありますか? – akalanta

関連する問題