7

ho impostato:Android: Media Player Durata Problema

mSeekBar.setMax(mp.getDuration()); // 8480 

Dopo il completamento della Audiofile, cosa sto ottenendo è:

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        public void onCompletion(MediaPlayer mediaPlayer) 
        { 
         Log.e("onComplete>>", ""+mediaPlayer.getCurrentPosition()); 

         // mediaPlayer.getCurrentPosition() = 8192 

         Log.e("getDuration", ""+mediaPlayer.getDuration()); 

         // mediaPlayer.getDuration() = 8480 

         if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
         { 
          // Why never get called??? 
         } 
        } 
       }); 

Quindi, perché è la posizione attuale del MediaPlayer non raggiunge mai il totale durata del file audio?

o tecnicamente possiamo dire come:

Why Not?

mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration() 

Perché sempre

mediaPlayer.getCurrentPosition() < mediaPlayer.getDuration() in OnCompletion ascoltatore?

Per esempio:

Ho un gioco Simbolo per l'avvio del lettore. Ora, quando premo il simbolo , convertiremo in simbolo Pausa.

Ho una Maxduration di audiodfile.

Ora voglio convertire Pausa simbolo per Giocare Simbolo quando il file audio viene riprodotto completamente. Quindi quello che sto facendo sta controllando:

if(mediaPlayer.getCurrentPosition()>=mediaPlayer.getDuration()) 
{ 
     // Convert Imagview from Pause to Play  
     // But never get called     
} 
+0

Cosa c'è di output di 'Log.i ("onComplete >>", "" + mediaPlayer.getCurrentPosition()); Log.i ("getDuration", "" + mediaPlayer.getDuration()); ' –

+0

posizione corrente è sempre inferiore a GetDuration. –

+1

Hmm .. Ho trovato una [discussione del problema] (https://code.google.com/p/android/issues/detail?id=38627) per lo stesso, ma non so se qualcuno abbia ancora trovato una soluzione o una spiegazione. . e [this] (http://www.anddev.org/multimedia-problems-f28/mediaplayer-getcurrentposition-t20032.html), pure. –

risposta

0

Se avete bisogno di fare qualche operazione al termine controllando currentPoision durata, si può fare sotto trucco:

if(mediaPlayer.getDuration()-mediaPlayer.getCurrentPosition()<1000){//milliseconds 
    new Handler().postDelayed(
    new Runnable() { 
     @Override 
     public void run() { 
      // Convert Imageview from Pause to Play  
     } 
    },1000); 
}