2012-08-22 9 views
5

Estoy tratando de reproducir video desde la URL de transmisión. el código es el siguienteProblema de vista de video en android 4.0 y superior

public class VideoPlayer extends Activity 
{ 
    private VideoView mVideoView;    
    String videoURL=""; 
    static Utility utility; 
    static Context context; 
    MediaController mediaController; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.video_player);   
     setupViews(); 
    } 

    private void setupViews() 
    { 
     context=VideoPlayer.this; 
     utility=new Utility(VideoPlayer.this); 
     isActivityisRunning=true; 
     showProgressDialog("Loading video.."); 
     videoURL=getIntent().getExtras().getString("url");    
     mVideoView=(VideoView)findViewById(R.id.video_view); 
     mediaController=new MediaController(context);    
     mVideoView.setMediaController(mediaController); 

     mVideoView.setOnPreparedListener(new OnPreparedListener() 
     { 
      @Override 
      public void onPrepared(MediaPlayer mp) 
      { 
       hideProgressDialog(); 

       if(bIsOnPausedCalled) 
        mVideoView.seekTo(LastDuration); 
        mVideoView.start();      
        mVideoView.requestFocus(); 
        bIsOnPausedCalled=false; 
        LastDuration=0; 
       } 
      }); 

      mVideoView.setOnCompletionListener(new OnCompletionListener() 
      { 

       @Override 
       public void onCompletion(MediaPlayer mp) 
       { 
        finish(); 
       } 
      }); 


      mVideoView.setOnErrorListener(new OnErrorListener() 
      { 

      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) 
      { 
       utility.hideProgressDialog(); 
       return false; 
      } 
     }); 

      playVideoFile();  
     } 

    public static void showDialog(String Message) 
    {  
       alertDialog = new AlertDialog.Builder(context).create(); 
       alertDialog.setTitle(Constant.DialogTitle); 
       alertDialog.setMessage(Message); 
       alertDialog.setCancelable(false); 
       alertDialog.setButton("Ok", new DialogInterface.OnClickListener() 
       { 
          public void onClick(DialogInterface dialog, int which) 
          {    
          dialog.dismiss();       
          } 
       }); 
       if(isActivityisRunning) 
        alertDialog.show(); 
       else 
        utility.showToast(Message); 
    } 

    static ProgressDialog progressDialog; 
    static AlertDialog alertDialog; 

    public void showProgressDialog(String Message) 
    { 
      hideProgressDialog(); 
      progressDialog=new ProgressDialog(context); 
      progressDialog.setTitle(Constant.DialogTitle); 
      progressDialog.setMessage(Message);       
      if(isActivityisRunning) 
       progressDialog.show(); 
      else 
       utility.showToast(Message); 
    } 

    public static boolean isActivityisRunning; 
    public static boolean showProgressDialog; 


    public static boolean bIsOnPausedCalled=false; 
    public static int LastDuration=0; 

     @Override 
     protected void onPause() 
     { 

      hideProgressDialog(); 
      bIsOnPausedCalled=true; 
      isActivityisRunning=false; 
      if (mVideoView != null) 
      {  
       if(LastDuration==0) 
       { 
        LastDuration=mVideoView.getCurrentPosition(); 
        mVideoView.suspend(); 
        mVideoView.setVisibility(View.GONE);  
       }    
      } 
      super.onPause(); 
     } 

     @Override 
     protected void onResume() 
     { 

      isActivityisRunning=true; 
       if(bIsOnPausedCalled) 
       {      
        setupViews();    
       } 
       super.onResume();  
     } 

     @Override 
     protected void onDestroy() 
     { 
      super.onDestroy(); 
      try 
      {    
       if (mVideoView != null) 
       { 
        mVideoView.stopPlayback(); 
        mVideoView=null;     
        hideProgressDialog(); 
        isActivityisRunning=false; 
        bIsOnPausedCalled=false; 
        LastDuration=0; 
       } 

      } catch (Exception e) 
      {}    
     } 


    public static void hideProgressDialog() 
    { 
     if(progressDialog!=null) 
     { 
      if(progressDialog.isShowing()) 
      { 
       progressDialog.dismiss(); 
      }   
     } 
    } 


    private void playVideoFile() 
     { 

       try 
       {     
        mVideoView.setVideoURI(Uri.parse(videoURL)); 
       } 
       catch (Exception e) 
       { 
        utility.hideProgressDialog(); 
        if (mVideoView != null) 
        {     
         mVideoView.stopPlayback(); 
        } 
       } 
      } 

Esto funciona bien en el dispositivo androide que tiene versión por debajo de 4,0 (con pausa y reanudar con el botón de modo de reposo). pero cuando intento reproducir video en un teléfono Android con la versión 4.0 o posterior, el video se reproduce bien, pero cuando el teléfono pasa al modo de suspensión y vuelve al modo de suspensión el tamaño de la vista de video se convierte en la mitad de la pantalla. como siguiente enter image description here

por favor ayuda?

Gracias de antemano .....

Respuesta

0

que está haciendo es correcto, pero todos se han aplicado setContentView (R.layout.video_player); únicos, aunque se reanude el video. lo que el código debe ser

@Override 
public void onCreate(Bundle savedInstanceState) 
{   
    super.onCreate(savedInstanceState);     
    setupViews(); 
} 

private void setupViews() 
{ 
    setContentView(R.layout.video_player); 
    context=VideoPlayer.this; 
    ----- 
    ------ 
} 

En lugar de

@Override 
public void onCreate(Bundle savedInstanceState) 
{   
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.video_player);  
    setupViews(); 
} 

private void setupViews() 
{ 
    context=VideoPlayer.this; 
    ----- 
    ------ 
} 
+0

Gracias hombre .... gr8 –

Cuestiones relacionadas