我正在尝试从流式网址播放视频。代码如下
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手机上播放视频时 视频将播放正常但电话进入睡眠模式并从睡眠模式恢复 视频视图大小变为屏幕的一半。如下
请帮帮忙?
先谢谢.....
答案 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;
-----
------
}