私はSeekBar
とMediaPlayer
を持っています。私は、それが一時停止している間追求したいのですが、ドキュメントが私にあると思われます。Android MediaPlayerでの一時停止と検索
、一時停止やPlaybackCompleted状態を準備 など、seekTo(INT)は、他の州で呼び出すことができますので、予めご了承ください。いつものように
、Android上で私の代わりに、コードの回避策を記述する必要があり(そしてその状態で、私は知ることはできません。この時点でMediaPlayer
あるので、このテーブルとステートマシンが完全に役に立ちません)。代わりにonSeekComplete
onCompletion
(9000回以上、私は冗談ではない)というメソッドが呼び出されているため! onSeekComplete
は、をonPrepared
(WHY、GOD、WHY ???)から呼び出した後でのみ呼び出されます。私は何をすべきかも知らない。私はそれに約5時間を費やし、何も修正されていない。私に何ができる?
UPD
ここは私のコードです。 onErrorListener
を追加した後
private void setupMediaPlayer() {
savedMediaPlayerState = null;
mediaPlayer = application.getMediaPlayer();
String mp3Path = "/path/to/mp3";
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setDataSource(mp3Path);
mediaPlayer.prepare();
}
@Override
public void onProgressChanged(android.widget.SeekBar sb, int i, boolean b) {
Log.i(TAG, String.format("Progress changed! %d", i));
if (b) {
mediaPlayer.seekTo(i);
updateProgressBarAndDurationLabels(i, mediaPlayer.getDuration(), false);
}
}
@Override
public void onStartTrackingTouch(android.widget.SeekBar sb) {
handler.removeCallbacks(updateTimeTask);
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(android.widget.SeekBar sb) {
int totalDuration = mediaPlayer.getDuration();
int currentPosition = sb.getProgress();// * totalDuration/100;
mediaPlayer.seekTo(currentPosition);
mediaPlayer.start();
updateProgressBar();
isSeeking = false;
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (!isSeeking) {
Log.i(TAG, "completed"); // Called over 9000 times
audioStopped();
}
}
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i2) {
return false; // Error -38 lol
}
@Override
public void onSeekComplete(MediaPlayer mp) {
Log.i(TAG, String.format("seek to: %d", mp.getCurrentPosition()));
isSeeking = false;
}
コードを見てみましょう。私はいくつかの機会に 'seekTo()'を使用しました。 – Geobits
@Geobits私はいくつかのコードを追加しました。 – efpies