Android 4.0及更高版本的视频视图问题

时间:2012-08-22 11:41:24

标签: android android-videoview

我正在尝试从流式网址播放视频。代码如下

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();
                    }
                }
            }   

这适用于版本低于4.0的Android设备(暂停和恢复睡眠模式按钮)。 但是当我试图在有4.0或更高版本的Android手机上播放视频时 视频将播放正常但电话进入睡眠模式并从睡眠模式恢复 视频视图大小变为屏幕的一半。如下enter image description here

请帮帮忙?

先谢谢.....

1 个答案:

答案 0 :(得分:0)

你正在做的都是正确的,但你已经应用了setContentView(R.layout.video_player); 只有一个,即使视频恢复。 所以代码应该是

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

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

而不是

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

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