android视频播放器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFCC"
    android:orientation="vertical"
    tools:context=".MainActivity" >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/video_text" />


    <EditText
        android:id="@+id/videoFileEt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="cat.3gp" />


    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:stretchColumns="*" >


        <TableRow>


            <ImageButton
                android:id="@+id/playBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/play" />


            <ImageButton
                android:id="@+id/pauseBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/pause" />


            <ImageButton
                android:id="@+id/resetBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/reset" />


            <ImageButton
                android:id="@+id/stopBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/stop" />
        </TableRow>
    </TableLayout>


    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="fill_parent"
        android:layout_height="240dip" />


</LinearLayout>




package com.example.radioplayer1;
import java.io.File;
import java.io.IOException;


import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener {


private static final String TAG = "VideoPlayerActivity";
private ImageButton playBtn, pauseBtn, resetBtn, stopBtn;
private EditText fileEt;
private SurfaceView videoSv;


private MediaPlayer mediaPlayer;


private SurfaceHolder holder;
private int position = 0;
File videoFile = null;



@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
position = savedInstanceState.getInt("position");
String fn = savedInstanceState.getString("fileName");
if(fn!=null){
videoFile = new File(Environment.getExternalStorageDirectory(),fn);
}

super.onRestoreInstanceState(savedInstanceState);
}


@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("position", position);
outState.putString("fileName", videoFile.getName());
super.onSaveInstanceState(outState);
}


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


findViews();


mediaPlayer = new MediaPlayer();
}


private void findViews() {
fileEt = (EditText) this.findViewById(R.id.videoFileEt);
playBtn = (ImageButton) this.findViewById(R.id.playBtn);
pauseBtn = (ImageButton) this.findViewById(R.id.pauseBtn);
resetBtn = (ImageButton) this.findViewById(R.id.resetBtn);
stopBtn = (ImageButton) this.findViewById(R.id.stopBtn);


playBtn.setOnClickListener(this);
pauseBtn.setOnClickListener(this);
resetBtn.setOnClickListener(this);
stopBtn.setOnClickListener(this);


videoSv = (SurfaceView) this.findViewById(R.id.surfaceView);
holder = videoSv.getHolder();


holder.setFixedSize(176, 144); // 设置分辨率
/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.addCallback(new SurfaceCallback());
}


public void onClick(View v) {


if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) {
String fileName = fileEt.getText().toString().trim();


videoFile = new File(
Environment.getExternalStorageDirectory(), fileName);
if (videoFile.exists()) {
try {
switch (v.getId()) {
case R.id.playBtn:
playVideo(videoFile);
break;
case R.id.pauseBtn:
if(mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.pause();
}else{
mediaPlayer.start();
}
/* if(mediaPlayer.isPlaying()){

mediaPlayer.pause();
}*/

break;
case R.id.resetBtn:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
playVideo(videoFile);
}
break;
case R.id.stopBtn:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}


} else {
showToast(R.string.notfoundfile_error);
}
} else {
showToast(R.string.notfoundsdcard_error);
}
}


private void playVideo(File videoFile) throws IOException {
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(videoFile.getAbsolutePath());
mediaPlayer.setDisplay(holder);
mediaPlayer.prepare();
mediaPlayer.start();
}


private void showToast(int resId) {
Toast.makeText(this, resId, 1).show();
}




protected void onDestroy() {

if(mediaPlayer != null){
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
super.onDestroy();
}


/* @Override
protected void onPause() {
if(mediaPlayer != null && mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
super.onPause();
}


@Override
protected void onResume() {
if(position >0 && videoFile != null){
try {
playVideo(videoFile);
Log.i(TAG,"position="+ position);
mediaPlayer.seekTo(position);
position = 0;
} catch (IOException e) {
Log.e(TAG,e.toString());
}

}

super.onResume();
}*/

private final class SurfaceCallback implements Callback{


@Override
public void surfaceCreated(SurfaceHolder holder) {
if(position >0 && videoFile != null){
try {
playVideo(videoFile);
Log.i(TAG,"position="+ position);
mediaPlayer.seekTo(position);
position = 0;
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
Log.i(TAG, "surfaceCreated");
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}


@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer != null && mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
Log.i(TAG, "surfaceDestroyed");
}

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值