2013-02-20 25 views
5

में रोकें और ढूंढें मेरे पास SeekBar और MediaPlayer है। मैं थोड़ी देर रुके तलाश करना चाहते हैं, लेकिन लगता है है कि डॉक्स मेरे लिए निहित है:एंड्रॉइड मीडियाप्लेयर

कृपया ध्यान दें कि seekTo (int) भी अन्य राज्यों में कहा जा सकता है, तैयार किया गया, रोका और PlaybackCompleted राज्य जैसे।

हमेशा की तरह, Android पर मैं कोड के बजाय समाधान लिखने के लिए है (और जिसमें राज्य इस समय मुझे पता नहीं कर सकते पर MediaPlayer है, इसलिए इस तालिका और राज्य मशीन पूरी तरह से बेकार है)। क्योंकि onSeekCompleteonCompletion (9000 से अधिक बार, मैं मजाक नहीं कर रहा हूं) की बजाय विधि कहा जाता है! onSeekComplete को onPrepared (क्यों, भगवान, क्यों ???) से कॉल करने के बाद ही बुलाया जाता है। मुझे यह भी नहीं पता कि क्या करना है। मैंने इसके बारे में 5 घंटे बिताए और कुछ भी तय नहीं हुआ। मैं क्या कर सकता हूँ?

यूपीडी

यहां मेरा कोड है।

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

onErrorListener जोड़ने के बाद, मुझे पता चला कि what=-38 साथ त्रुटि यहां हो रहा है। हालांकि, onError से true लौटने से मेरी समस्या हल हो गई। कोई नहीं जानता कि इसका क्या अर्थ है।