2013-02-20 9 views
5

私はSeekBarMediaPlayerを持っています。私は、それが一時停止している間追求したいのですが、ドキュメントが私にあると思われます。Android MediaPlayerでの一時停止と検索

、一時停止やPlaybackCompleted状態を準備 など、seekTo(INT)は、他の州で呼び出すことができますので、予めご了承ください。いつものように

、Android上で私の代わりに、コードの回避策を記述する必要があり(そしてその状態で、私は知ることはできません。この時点でMediaPlayerあるので、このテーブルとステートマシンが完全に役に立ちません)。代わりにonSeekCompleteonCompletion(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; 
} 
+1

コードを見てみましょう。私はいくつかの機会に 'seekTo()'を使用しました。 – Geobits

+0

@Geobits私はいくつかのコードを追加しました。 – efpies

答えて

7

、私はwhat=-38とエラーがここで起こっていることを発見しました。しかし、返すtrueからonError私の問題を解決しました。それが何を意味するのかは誰も分かりません。

関連する問題