在Android中,我们有三种方式来实现视频的播放:

  1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。

  2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。

  3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。

  本案例着重讲解第三种MediaPlayer方式:MediaPlayer播放视频除了利用MediaPlayer,还需要SurfaceView与之配合,Surface可以完成对后台线程的控制,对于视频、3D加速或者高频率对象都有很大的用途。

  

一、设计界面

  1、首先把play.png、stop.png两张图片复制到res/drawable-hdpi文件夹内。

  

  2、布局文件

  打开activity_main.xml文件。

  输入以下代码:

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton
android:id="@+id/playvideo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" />
<ImageButton
android:id="@+id/stopvideo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop" />
<SurfaceView
android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

二、程序文件

  打开“src/com.genwoxue.mp3/MainActivity.java”文件。

  然后输入以下代码

package com.genwoxue.videoplayer;
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.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class MainActivity extends Activity{
private SurfaceView surfaceView=null;
private SurfaceHolder surfaceHolder=null;
private MediaPlayer media=null;
private ImageButton btnPlay=null;
private ImageButton btnStop=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得surfaceView对象
surfaceView = (SurfaceView) this.findViewById(R.id.surface);
//获得surfaceHolder对象
surfaceHolder = this.surfaceView.getHolder();
//设置 SurfaceView类型
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//创建MediaPlayer对象
media=new MediaPlayer();
try {
this.media.setDataSource(       //设置视频源,即视频路径
Environment.getExternalStorageDirectory()
.getPath()
+"/genwoxue/mybaby.3gp");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
btnPlay=(ImageButton)super.findViewById(R.id.playvideo);
btnStop=(ImageButton)super.findViewById(R.id.stopvideo);
//播放视频
btnPlay.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
media.setAudioStreamType(AudioManager.STREAM_MUSIC);
media.setDisplay(MainActivity.this.surfaceHolder);
try {
media.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
media.start();
}
});
//停止视频
btnStop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
media.stop();
}
});
}
}

三、运行结果

   

  单击“播放”按钮,“里约大冒险”正在为您热映……

附:

  (1)使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");
//调用系统自带的播放器
Intent intent = new Intent(Intent.ACTION_VIEW);
Log.v("URI:::::::::", uri.toString());
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);  

  (2)使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");
VideoView videoView = (VideoView)this.findViewById(R.id.video_view);
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(uri);
videoView.start();
videoView.requestFocus();  

第55章、播放视频(从零开始学Android)相关推荐

  1. 第52章,bitmap图像处理(从零开始学android),第52章、Bitmap图像处理(从零开始学Android)...

    1.Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitma ...

  2. 从零开始学android:Android中的基本控件(上)

    从零开始学android:Android中的基本控件(上) 本章内容较多,下面只贴代码,大家只需要贴到自己eclipse里就知道作用^^! View组件简介 Android中的View组件包含了几乎所 ...

  3. CCNA视频----从零开始学CCNA实验视频课程(加强版)-晁海江-专题视频课程

    CCNA视频----从零开始学CCNA实验视频课程(加强版)-22537人已学习 课程介绍         本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知 ...

  4. 第88章、系统服务之NOTIFICATION_SERVICE服务(从零开始学Android)

    Notification通知将一个图标(包含一条可选的提示文本信息)填加到系统的状态栏(一般来说,Android手机的状态栏是在顶部,非底部,要注意噢)中,并将一条展开信息添加到通知窗口中.当用户选中 ...

  5. 从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...

    程序员书库(ID:CodingBook) 猿妹编译 链接:https://android-developers.googleblog.com/2020/07/learn-android-and-kot ...

  6. 从零开始学android编程_android初学者的入门秘籍

    大概是去年年底开始接触android 原本是学习嵌入式的我,领导让我看看能不能搞一下这个android APP. 一开始的我懵逼得很... 这android APP 不是得用java写吗??? 现在我 ...

  7. 第57章、录制视频(从零开始学Android)

    录制视频显然要比音频复杂点,那么我们一起看看录制视频又该如何做呢? (1)首先,我们肯定要用到摄像头,因此需要在Manifest文件中声明使用权限: <uses-permission andro ...

  8. 第1章、从零开始学Android

    引子 滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 都付笑谈中 --------------------------- ...

  9. 第89章、系统服务之SMS服务(从零开始学Android)

    每逢佳节,中国移动.电信.联通都是偷偷笑的日子,又不知道多少短信费用纳入囊中,尽管微信.QQ.飞信漫天飞,但仍然阻挡不了节日祝福短信的火爆,但群发实在没有意义,你是不是想来一个既个性而又群发呢? 譬如 ...

  10. 第8章、下拉列表框Spinner(从零开始学Android)

    在Android App应用中,下拉列表框Spinner的使用频次是相当高的,如果你对Spinner陌生,你一定不会对HTML中的SELECT陌生,他们的作用是一样的,都是多选一.我们需要学习Andr ...

最新文章

  1. 异步备份和还原数据库:.NET发现之旅(六)
  2. 如何使double为整数时不带小数点
  3. java编写类骑士游历_java课程设计骑士游历程序的开发
  4. 将War发布到Tomcat7上遇到的问题及其解决
  5. 嵌入式c语言检测键盘,【精华整理】C语言嵌入式系统编程修炼--键盘操作篇
  6. 小米用户画像_鹅智库发布手机品牌用户画像 一二线城市最爱小米 5G领域或占先机...
  7. 人工蜂群算法_如果你的团队能够像人工蜂群一样战斗
  8. 利用nvm管理Node的版本
  9. tab 切换显示网页链接的标签_chromium如何管理Tab
  10. Process Kill Technology Process Protection Against In Linux
  11. C/C++ Dev-cpp 5.4.0下载安装包,百度网盘
  12. 全球首个区块链经理人指数发布: 3月BMI 62.7 行业景气整体向好
  13. 知道焊缝长度如何确定节点板尺寸_必看!手把手教你如何看懂图纸
  14. java大学生网上请假系统ssm框架
  15. 职场情商“知多少”?
  16. linux xunsou_Linux下的迅搜(xunsearch)安装使用教程,并设置成开机启动服务
  17. 2020年,程序员必看的10部影视作品!《源代码》只是其中之一
  18. EtherCAT学习笔记:周期性过程数据通信
  19. 无缝大世界之无缝连接Terrain转mesh
  20. swagger使用教程——快速使用swagger

热门文章

  1. eclipse配置java环境_java环境搭建(Eclipse)
  2. python 美化ppt_python操作PPT------PPT内容样式调整
  3. Apache Flume 1.7深入浅出,快速入门
  4. dicom worklist下载病例程序/dicom worklist scu (c#版本)
  5. 各种格式的文件使用工具打开
  6. file js new 传到后台_JS读取文件且AJAX传输到后台
  7. mysql alter before_MySQL之alter语句用法总结
  8. (深度原创)华为基于LTC主流程的组织销售能力提升,含相关工具模板方法!
  9. masm32 安装过程(记录)
  10. python爬虫淘宝评论图片_淘宝上的图片是怎么被爬取的