Android 视频播放器VideoView
2017-04-10 21:49
141 查看
项目简介:
该项目为视频播放器,使用的是Android自己的框架VideoView完成的。另外,使用SurfaceView+MediaPlayer实现视频播放的到这里去
使用另一个开源的框架Vitamio是实现视频播放的到这里去
详细介绍:
用户点击按钮后,将会播放一段视频。无论是用户用home键返回桌面还是用返回键返回上一个Activity,只要该应用程序所在进程没有被杀死,在此进入该视频将继续接着上次位置开始播放该应用涉及到的知识有:
1.VideoView的使用VideoView实质上是MediaPlayer+SurfaceView的封装
2.getApplicationContext()与this的区别
在本程序中获取MediaController的时候会发现传入this应用一切正常,但是如果传入getApplicationContext(),一旦点击屏幕程序就会出错,直接返回上一个Activity。这是因为两者获取的Context对象是有区别的。
getApplicationContext():这是取得整个应用的上下文,在整个应用中是唯一的,且生命周期与整个应用的周期相同。
this:主要有三种用法
1).表示对当前对象的引用
2).表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分
3).用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始
当this用来表示context的时候,注意是当前的上下文,而不一定是整个应用的上下文
注意:
1.Activity需要在清单文件中注册2.需要在清单文件中添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
涉及到读取SD卡的视频,所有需要添加这一条
步骤:
1.首先创建一个Android项目,创建两个布局文件。
第一个布局文件是 activity_main.xml ,这个布局文件中仅有一个按钮:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="hhh.exercise.smultimedia_e.MainActivity" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="click" android:text="点击看片 " android:textSize="30sp" android:textColor="#00ff00" /> </RelativeLayout>
第二个布局文件是activity_second.xml,这个布局文件也非常简单,只有一个VideoView控件,这是用来播放是视频时的布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <VideoView android:id="@+id/vv" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
2.编写Activity的代码
首先是MainActivity的代码,这个Activity的作用就是跳转界面到视频播放上。一般情况下,都是从一个ListView的条目中跳转到视频播放上,然后通过Intent携带数据(视频的信息)给另一个Activity,这里直接简化了,直接点击按钮就开始播放,没有携带任何数据。
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view) { Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); } }
然后是编写SecondActivity的代码,这个Activity加载activity_second.xml布局文件,然后播放视频。
import java.io.File; import android.app.Activity; import android.content.pm.ActivityInfo; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.Environment; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.MediaController; import android.widget.Toast; import android.widget.VideoView; /** * @author HHH * */ public class SecondActivity extends Activity { private VideoView vv; private MediaController mc; private static int secondCurrentPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //设置全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 不需要设置播放时屏幕常量,因为在VideoView控件中系统设置过了。直接加载布局文件即可 setContentView(R.layout.activity_second); vv = (VideoView) findViewById(R.id.vv); final File file = new File(Environment.getExternalStorageDirectory().getPath(), "s3.mp4"); // 创建一个MediaController。 // 这里的Context一定要传入this,不能用getApplicationContext().否则一点击屏幕就闪退 mc = new MediaController(SecondActivity.this); // 开创建SurfaceView的控制器 SurfaceHolder holder = vv.getHolder(); holder.addCallback(new Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { if (file.exists()) { // 设置要播放的视频 vv.setVideoPath(file.getPath()); // 设置VideoView与MediaController相关联 vv.setMediaController(mc); // 设置VideoView获取焦点 vv.requestFocus(); // 将背景图片设为透明 // vv.getBackground().setAlpha(0); // 开始播放视频(如果上次有播放记录,接着上次播放) vv.start(); vv.seekTo(secondCurrentPosition); } else { Toast.makeText(getApplicationContext(), "视频不存在", 0).show(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); // 设置播放完毕后循环播放 vv.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.seekTo(0); mp.start(); } }); // 增加监听上一个和下一个的切换事件,默认这两个按钮是不显示的 mc.setPrevNextListeners(new OnClickListener() { @Override public void onClick(View v) { // 这里直接弹出吐司,开发中这里应当切换到下一首 Toast.makeText(SecondActivity.this, "下一个", 0).show(); } }, new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SecondActivity.this, "上一个", 0).show(); } }); } // 当Activity退出界面(无论Activity是否销毁了),记录当前视频播放进度 @Override protected void onPause() { if (vv.isPlaying()) { secondCurrentPosition = vv.getCurrentPosition(); vv.pause(); vv.suspend(); } super.onPause(); } }
3.清单文件中注册并添加权限
注册
<activity android:name="SecondActivity"></activity>
添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
4.部署后演示效果。
进入应用后,点击按钮看片
点击一下屏幕,就会出现控制栏
点击快进,后退,停止/播放键都可以
点击SeekBar(即进度条)到任意位置,都会找到那个位置进行播放
直接按手机home键或者返回键返回,下次进入界面都会继续播放。但是一定整个应用的进程没有背杀死。
相关文章推荐
- Android多媒体开发【2】-- 利用VideoView开发最简单的视频播放器
- Android开发06_VideoView、SurfaceView两种视频播放器
- android使用VideoView设计的扫描全局.mp4和.3gp的视频播放器
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频
- android_视频播放器(VideoView)
- Android:利用VideoView实现视频播放器
- Android多媒体开发【2】-- 利用VideoView开发最简单的视频播放器
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频,androidvideoview
- android关于VideoView或Vitamio视频播放器横竖屏切换
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频
- Android中关于ScrollView中有视频播放器VideoView时问题的总结
- Android-SurfaceView+VideoView视频播放器实例
- Android视频播放项目总结之 使用VideoView定义自己的视频播放器
- android 视频播放器 android videoView 按不同比例缩放
- android 视频播放器 android videoView 按不同比例缩放 .
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络视频
- Android VideoView播放视频
- 27、从头学Android之多媒体--使用VideoView播放视频
- android videoView 按不同比例缩放
- Android VideoView播放视频