package cn.itcast.videoplayer; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.os.Environment; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity{ private EditTextnameText; private Stringpath; private MediaPlayermediaPlayer; private SurfaceViewsurfaceView; private boolean pause; private int position; @Override public void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.main); mediaPlayer= new MediaPlayer(); nameText=(EditText) this .findViewById(R.id.filename); surfaceView=(SurfaceView) this .findViewById(R.id.surfaceView); //把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize( 176 , 144 ); surfaceView.getHolder().setKeepScreenOn( true ); surfaceView.getHolder().addCallback( new SurfaceCallback()); } private final class SurfaceCallback implements Callback{ public void surfaceChanged(SurfaceHolderholder, int format, int width, int height){ } public void surfaceCreated(SurfaceHolderholder){ if (position> 0 &&path!= null ){ play(position); position= 0 ; } } public void surfaceDestroyed(SurfaceHolderholder){ if (mediaPlayer.isPlaying()){ position=mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); } } } @Override protected void onDestroy(){ mediaPlayer.release(); mediaPlayer= null ; super .onDestroy(); } public void mediaplay(Viewv){ switch (v.getId()){ case R.id.playbutton: Stringfilename=nameText.getText().toString(); if (filename.startsWith( "http" )){ path=filename; play( 0 ); } else { Filefile= new File(Environment.getExternalStorageDirectory(),filename); if (file.exists()){ path=file.getAbsolutePath(); play( 0 ); } else { path= null ; Toast.makeText( this ,R.string.filenoexsit, 1 ).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 (Exceptione){ e.printStackTrace(); } } private final class PrepareListener implements OnPreparedListener{ private int position; public PrepareListener( int position){ this .position=position; } public void onPrepared(MediaPlayermp){ mediaPlayer.start(); //播放视频 if (position> 0 )mediaPlayer.seekTo(position); } } }

更多相关文章

  1. opencv for android(十六):opencv在android上的录制avi格式的视频
  2. android 学习视频
  3. Android图形系统(八)-app与SurfaceFlinger共享UI元数据过程
  4. 【Android】 从头搭建视频播放器(1)——概述
  5. Android(安卓)音视频开发(五) : OpenGL ES API,了解 OpenGL 开发
  6. Android视频播放之边缓存边播放
  7. android之视频播放
  8. android开发视频教程 android培训入门教程 Android菜鸟教程
  9. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析

随机推荐

  1. ym——安卓巴士总结了近百个Android优秀
  2. android四层框架
  3. 2014 年 Android(安卓)碎片化报告
  4. Android入门教程(五)之------第一个Andro
  5. Android基础入门教程——8.1.1 Android中
  6. Android高手进阶教程(二十二)之---Androi
  7. android 环境搭建
  8. Android短信发送器的实现
  9. android log
  10. YUV420P、YUV420SP、NV12、NV21和RGB互相