2011-10-19 15 views
23

Estoy desarrollando una aplicación de video. Después de la primera reproducción de video, en "OnCopletion" estoy tratando de comenzar una nueva. Pero simplemente se detiene (no se bloquea) y no hace nada. En el registro:java.lang.IllegalStateException ¿qué significa?

10-19 09:44:49.056: ERROR/MediaPlayer(4654): setDataSource called in state 128 
10-19 09:44:49.056: WARN/System.err(4654): java.lang.IllegalStateException 
10-19 09:44:49.056: WARN/System.err(4654):  at android.media.MediaPlayer.setDataSource(Native Method) 
10-19 09:44:49.056: WARN/System.err(4654):  at ru.osiris.BusAdvertising.BusAdvertisingActivity.onCompletion(BusAdvertisingActivity.java:1255) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1304) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.os.Looper.loop(Looper.java:123) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
10-19 09:44:49.056: WARN/System.err(4654):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-19 09:44:49.056: WARN/System.err(4654):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-19 09:44:49.056: WARN/System.err(4654):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-19 09:44:49.056: WARN/System.err(4654):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-19 09:44:49.056: WARN/System.err(4654):  at dalvik.system.NativeStart.main(Native Method) 

¿qué significa? ¿Cómo puedo arreglarlo? no es mi código:

public class BusAdvertisingActivity extends Activity implements LocationListener, OnBufferingUpdateListener, OnCompletionListener, 
OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 
... 
    private MediaPlayer mMediaPlayer; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    private String path; 
    private Bundle extras; 

    @Override 
    public void onCreate(Bundle icicle) { 
     mPreview = (SurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     extras = getIntent().getExtras(); 
    } 
public void surfaceCreated(SurfaceHolder holder) { 
     Log.d(TAG, "surfaceCreated called"); 
     playVideo(); 
} 
private void playVideo(Integer Media) { 
     Log.d(TAG, "playVideo called"); 
     doCleanUp(); 
     try { 
      File clip=new File(Environment.getExternalStorageDirectory(), 
          playList[FLcurrentVideo].substring(2,   playList[FLcurrentVideo].length()-1)+".mp4"); 
      path = clip.getAbsolutePath(); 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setDataSource(path); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 


     } catch (Exception e) { 
      Log.e(TAG, "error: " + e.getMessage(), e); 
     } 
    } 


public void onCompletion(MediaPlayer arg0) { 

     Log.d(TAG, "onCompletion called"); 
     FLcurrentVideo++; 

     File clip=new File(Environment.getExternalStorageDirectory(), 
       playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4"); 
       path = clip.getAbsolutePath(); 

        try { 
         Log.d ("111", path); 
         arg0.setDataSource(clip.getAbsolutePath()); //I got exception here 
         arg0.setDisplay(holder); 
         arg0.prepare(); 
         arg0.setOnBufferingUpdateListener(this); 
         arg0.setOnCompletionListener(this); 
         arg0.setOnPreparedListener(this); 
         arg0.setOnVideoSizeChangedListener(this); 
         arg0.setAudioStreamType(AudioManager.STREAM_MUSIC); 
        } catch (IllegalArgumentException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 



    } 

Por favor, ayúdame.

Respuesta

0

docs Android dicen sobre IllegalStateException:

lanza cuando una acción se intenta a la vez cuando la máquina virtual no está en el estado correcto .

Cuestiones relacionadas