2011-08-17 20 views
9

Ho seguente codice per riprodurre piccoli file audiolettore multimediale Android ritorna IllegalStateException

private void playVoice() { 

    if (mPlayVoice != null) { 
     if (mPlayVoice.isPlaying()) { 
      mPlayVoice.release(); 
      mPlayVoice = null; 
     } 
    } 
    mPlayVoice = 
     MediaPlayer.create(BirdsActivity.this, mSoundIds[getCurrentIndex()]); 
    mPlayVoice.start(); 
} 

Funziona bene in Samsung Galaxy Tab, ma dà seguito di errore nel dispositivo di piccole dimensioni (ho controllato in mini Xperia di Sony pro il mio progetto)

08-17 12:45:45.232: ERROR/AndroidRuntime(6639): java.lang.IllegalStateException 
    08-17 12:45:45.232: ERROR/AndroidRuntime(6639):  at android.media.MediaPlayer.isPlaying(Native Method) 
    08-17 12:45:45.232: ERROR/AndroidRuntime(6639):  at   com.android.mds.kidsapps.alphakids.BirdsActivity.playVoice(BirdsActivity.java:146) 

risposta

12

si sta facendo questo:

PlayVoice.release(); 

ti non significa

mPlayVoice.release(); 

Se avete altri problemi di questo è il documento meglio consultare:

Android MediaPlayer

EDIT

Ok se siete qui: isPlaying() Invalid States di essa la si sta cercando di spettacolo chiama isPlaying() mentre il lettore si trova nello stato di errore. Quindi è necessario capire perché è già nello stato di errore.

In generale, alcune operazioni di controllo della riproduzione potrebbero non riuscire a causa di vari motivi, come il formato audio/video non supportato, audio/video scarsamente interlacciato, risoluzione troppo alta, timeout dello streaming e simili.

Dai un'occhiata alla aggiunta di un listener errore: setOnErrorListener()

+0

In realtà non era quello il problema .. è accaduto durante la pubblicazione della domanda – vnshetty

+0

Allora, qual è la linea 146 in BirdsActivity? – Blundell

+0

if (mPlayVoice.isPlaying()) – vnshetty

10

utilizzare il seguente codice come stavo affrontando la stessa eccezione.

try { 
    if(mPlayVoice!=null && mPlayVoice.isPlaying()) { 
     Log.d("TAG------->", "player is running"); 
     mPlayVoice.stop(); 
     Log.d("Tag------->", "player is stopped"); 
     mPlayVoice.release(); 
     Log.d("TAG------->", "player is released"); 
    } 
} catch(Exception e){ 
} 

Qui scrivi quello che vuoi fare. In realtà la condizione che verifica come isPlaying() o il controllo di null genera l'IllegalStateException .....

2

Potrebbe essere necessario cancellare l'audioGruppo unito con audioStream. Il mio ha lavorato con il seguente codice:

public static void audioPlayCaptureStop() 
     { 

      try 
      { 
       if(audioStream.isBusy()) 
       { 
        audioGroup.clear(); 
        audioStream.release(); 
        System.out.println("audioStream released"); 
       } 

      } catch (Exception e) { 
       System.out.println("audioStream release exception: "+e.toString()); 
      } 
     } 
Problemi correlati