VideoView播放视频过程中视频停止播放的问题求解
目的:实现在程序中播放本地视频。想到用VideoView,但是出现了问题,如题目描述。上网也查找了些资料,估计是
关键字不够精确,所以没找到答案。大家帮帮忙,能告诉我出现这个问题的原因或者给我一些提示、思路怎样实现在
程序中播放本地视频(有什么插件之类的吗?)
[解决办法]
停止播放是否出现什么提示?如果有错误提示,将Logcat中的出错信息发上来。
[解决办法]
package com.zhu.view;import java.io.File;import android.app.Activity;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.Toast;import com.zhu.R;public class VideoPlay extends Activity implements Callback { private String path; private MediaPlayer mediaPlayer; String pathload; private SurfaceView surfaceView; private boolean pause; private String filenames; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 隐藏状态栏 */ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); /* 隐藏标题栏 */ requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.video); mediaPlayer = new MediaPlayer(); Bundle bundle = this.getIntent().getExtras(); filenames = bundle.getString("filenames"); pathload = bundle.getString("pathload"); surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(320, 180); surfaceView.getHolder().setKeepScreenOn(true); surfaceView.getHolder().addCallback(this); playOn(); } public void mediaplay(View v) { switch (v.getId()) { case R.id.playbutton: if (pause && mediaPlayer!=null) { mediaPlayer.start(); pause = false; } else{ String filename = filenames.toString(); File file = new File(Environment.getExternalStorageDirectory(), filename); if (file.exists()) { path = file.getAbsolutePath(); play(0); } else { path = null; Toast.makeText(this, R.string.filenoexsit, Toast.LENGTH_LONG).show(); } } break; case R.id.pausebutton: if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); pause = true; } else { if (pause) { mediaPlayer.start(); pause = false; } } break; case R.id.resetbutton: if (mediaPlayer.isPlaying()) { mediaPlayer.seekTo(0); } else { if (path != null) { play(0); } } break; case R.id.stopbutton: if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } break; } } private void play(int position) { try { mediaPlayer.reset(); mediaPlayer.setDataSource(path); mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.prepare();// 缓冲 mediaPlayer.setOnPreparedListener(new PrepareListener(position)); } catch (Exception e) { e.printStackTrace(); } } private void playOn() { try { mediaPlayer.reset(); mediaPlayer.setDataSource(pathload); mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.prepare();// 缓冲 mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } } private final class PrepareListener implements OnPreparedListener { private int position; public PrepareListener(int position) { this.position = position; } public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); if (position > 0) mediaPlayer.seekTo(position); } } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub }}
[解决办法]
package com.android.loop;
import java.io.IOException;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class PreviewActivityLoop extends Activity {
public static final String VIDEO_FOLDER_PATH = PropagandaVedioSettings.path;
private PowerManager.WakeLock localWakeLock = null;
private SurfaceView surfaceView = null;
private SurfaceHolder holder = null;
private MediaPlayer mPlayer = null;
private String[] sourceList;
private int sourceIndex = -1;
FileList filelist = new FileList();
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
requestWindowFeature(Window.FEATURE_NO_TITLE); //hide title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(0);// change display orientation
localWakeLock = ((PowerManager) getSystemService(Context.POWER_SERVICE))
.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen");
localWakeLock.acquire();//do not auto lock
View view = getLayoutInflater().inflate(R.layout.surfaceview, null);
setContentView(view);
Bundle bundle = getIntent().getExtras();
sourceIndex = bundle.getInt("sourceIndex");
sourceList = bundle.getStringArray("sourceList");
mPlayer = new MediaPlayer();
surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
surfaceView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
finish();
return false;
}
});
holder = surfaceView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setKeepScreenOn(true);
holder.addCallback(new SurfaceListener());
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
Intent intent = new Intent();
Bundle bundleloop = new Bundle();
bundleloop.putInt("sourceIndexloop", sourceIndex);
bundleloop.putStringArray("sourceListloop", sourceList);
intent.putExtras(bundleloop);
ComponentName cn = new ComponentName("com.android.loop","com.android.loop.PreviewActivity");
intent.setComponent(cn);
startActivity(intent);
finish();
}
});
}
@Override
protected void onDestroy() {
if(mPlayer.isPlaying()){
mPlayer.stop();
}
mPlayer.release();//release mPlayer
localWakeLock.release();//release localWakeLock
super.onDestroy();
}
@Override
protected void onPause() {
finish();
super.onPause();
}
private void play(String dataSource){
try{
mPlayer.reset();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(dataSource);
mPlayer.setDisplay(holder);
mPlayer.prepare();
mPlayer.start();
}catch(IOException e){
Log.e("Exception", e.toString());
}
//mPlayer.setOnPreparedListener(new OnPreparedListener() {
//
//@Override
//public void onPrepared(MediaPlayer mp) {
//mPlayer.start();
//}
//});
}
private class SurfaceListener implements SurfaceHolder.Callback{
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//play(filelist.getVideo(sourceIndex));
play(sourceList[sourceIndex]);
sourceIndex++;
sourceIndex = sourceIndex%sourceList.length;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
}