使用VideoView和MediaController进行视频播放

使用VideoView+MediaController实现视频播放器 使用VideoView+MediaController实现视频播放器 1.界面设计 2.实现代码 3.播放权限 1.界面设计(activity_video_view.xml) <VideoView android:layout_width="match_parent" android:layout_height="400dp" android 阅读详情

一个视频播放的activity,可以直接拿过来用,比较简单,直接贴个代码留作记录,效果如下:



  1. /** 
  2.  * 视频播放的activity<br> 
  3.  * 使用方法:<br> 
  4.  * 1、AndroidManifest.xml中添加此activity<br> 
  5.  * 2、Intent中存入待播放视频的URL,支持本地和网络<br> 
  6.  * 3、启动这个activity<br> 
  7.  * <br> 
  8.  * example:<br> 
  9.  * String url = “play url”;<br> 
  10.  * Intent intent = new Intent();<br> 
  11.  * intent.setClass(this, VideoPlayActivity.class);<br> 
  12.  * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br> 
  13.  * startActivity(intent);<br> 
  14.  *  
  15.  * @author ttworking 
  16.  *  
  17.  */  
  18. public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {  
  19.     public static final String KEY_URL = “view_url”;  
  20.   
  21.     private static final String TAG = “VideoPlayActivity”;  
  22.     private static final int PLAY_RETURN = 2 * 1000; // 2 seconds  
  23.     private static final String KEY_PLAY_POSITON = “paly_position”;  
  24.     private static final String TOAST_ERROR_URL = “Paly url is null, please check parameter:” + KEY_URL;  
  25.     private static final String TOAST_ERROR_PLAY = “Paly error, please check url exist!”;  
  26.     private static final String DIALOG_TITILE = “奋力加载中,请稍后…”;  
  27.   
  28.     private static String url;  
  29.   
  30.     private ProgressDialog progressDialog;  
  31.     private MediaController mc;  
  32.     private VideoView videoView;  
  33.     private LinearLayout llMain;  
  34.     private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);  
  35.   
  36.     @Override  
  37.     protected void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.   
  40.         url = getIntent().getStringExtra(KEY_URL);  
  41.         if (url == null && savedInstanceState != null) {  
  42.             url = savedInstanceState.getString(KEY_URL);  
  43.         }  
  44.   
  45.         if (url == null) {  
  46.             Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();  
  47.             finish();  
  48.             return;  
  49.         }  
  50.   
  51.         setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);  
  52.   
  53.         videoView = new VideoView(this);  
  54.         videoView.setVideoURI(Uri.parse(url));  
  55.         videoView.requestFocus();  
  56.         videoView.setOnPreparedListener(this);  
  57.         videoView.setOnErrorListener(this);  
  58.   
  59.         mc = new MediaController(this);  
  60.         mc.setAnchorView(videoView);  
  61.         mc.setKeepScreenOn(true);  
  62.   
  63.         videoView.setMediaController(mc);  
  64.   
  65.         llMain = new LinearLayout(this);  
  66.         llMain.setGravity(Gravity.CENTER_VERTICAL);  
  67.         llMain.setOrientation(LinearLayout.VERTICAL);  
  68.         llMain.setLayoutParams(params);  
  69.   
  70.         llMain.addView(videoView, params);  
  71.         setContentView(llMain);  
  72.   
  73.         initDialog();  
  74.     }  
  75.   
  76.     @Override  
  77.     protected void onSaveInstanceState(Bundle outState) {  
  78.         super.onSaveInstanceState(outState);  
  79.   
  80.         int palyPosition = videoView.getCurrentPosition();  
  81.         if (palyPosition > PLAY_RETURN) {  
  82.             palyPosition -= PLAY_RETURN;  
  83.         }  
  84.         outState.putInt(KEY_PLAY_POSITON, palyPosition);  
  85.         outState.putString(KEY_URL, url);  
  86.     }  
  87.   
  88.     @Override  
  89.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  90.         super.onRestoreInstanceState(savedInstanceState);  
  91.   
  92.         videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));  
  93.     }  
  94.   
  95.     @Override  
  96.     public void onPrepared(MediaPlayer mp) {  
  97.         progressDialog.cancel();  
  98.   
  99.         videoView.start();  
  100.     }  
  101.   
  102.     @Override  
  103.     public boolean onError(MediaPlayer mp, int what, int extra) {  
  104.         Log.d(TAG, ”onError:” + url);  
  105.   
  106.         Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + ”\n” + url, Toast.LENGTH_LONG).show();  
  107.         progressDialog.cancel();  
  108.         finish();  
  109.   
  110.         return true;  
  111.     }  
  112.   
  113.     private void initDialog() {  
  114.         progressDialog = new ProgressDialog(this);  
  115.         progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  116.         progressDialog.setMessage(DIALOG_TITILE);  
  117.         progressDialog.setCancelable(false);  
  118.         progressDialog.show();  
  119.     }  
  120. }  
/**
 * 视频播放的activity<br>
 * 使用方法:<br>
 * 1、AndroidManifest.xml中添加此activity<br>
 * 2、Intent中存入待播放视频的URL,支持本地和网络<br>
 * 3、启动这个activity<br>
 * <br>
 * example:<br>
 * String url = "play url";<br>
 * Intent intent = new Intent();<br>
 * intent.setClass(this, VideoPlayActivity.class);<br>
 * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br>
 * startActivity(intent);<br>
 * 
 * @author ttworking
 * 
 */
public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {
    public static final String KEY_URL = "view_url";

    private static final String TAG = "VideoPlayActivity";
    private static final int PLAY_RETURN = 2 * 1000; // 2 seconds
    private static final String KEY_PLAY_POSITON = "paly_position";
    private static final String TOAST_ERROR_URL = "Paly url is null, please check parameter:" + KEY_URL;
    private static final String TOAST_ERROR_PLAY = "Paly error, please check url exist!";
    private static final String DIALOG_TITILE = "奋力加载中,请稍后...";

    private static String url;

    private ProgressDialog progressDialog;
    private MediaController mc;
    private VideoView videoView;
    private LinearLayout llMain;
    private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        url = getIntent().getStringExtra(KEY_URL);
        if (url == null && savedInstanceState != null) {
            url = savedInstanceState.getString(KEY_URL);
        }

        if (url == null) {
            Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();
            finish();
            return;
        }

        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);

        videoView = new VideoView(this);
        videoView.setVideoURI(Uri.parse(url));
        videoView.requestFocus();
        videoView.setOnPreparedListener(this);
        videoView.setOnErrorListener(this);

        mc = new MediaController(this);
        mc.setAnchorView(videoView);
        mc.setKeepScreenOn(true);

        videoView.setMediaController(mc);

        llMain = new LinearLayout(this);
        llMain.setGravity(Gravity.CENTER_VERTICAL);
        llMain.setOrientation(LinearLayout.VERTICAL);
        llMain.setLayoutParams(params);

        llMain.addView(videoView, params);
        setContentView(llMain);

        initDialog();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        int palyPosition = videoView.getCurrentPosition();
        if (palyPosition > PLAY_RETURN) {
            palyPosition -= PLAY_RETURN;
        }
        outState.putInt(KEY_PLAY_POSITON, palyPosition);
        outState.putString(KEY_URL, url);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        progressDialog.cancel();

        videoView.start();
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.d(TAG, "onError:" + url);

        Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + "\n" + url, Toast.LENGTH_LONG).show();
        progressDialog.cancel();
        finish();

        return true;
    }

    private void initDialog() {
        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage(DIALOG_TITILE);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }
}



from:http://blog.youkuaiyun.com/ttdevs/article/details/16863511

android 中使用VideoView+MediaController网络视频播放器 1 AndroidManifest.xml配置文件 在配置文件中设置权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> 2 activity_main.xml布局文件 <?xml version="1.0" encoding="utf-8"?&gt 阅读详情

相关推荐

android之视频播放控件VideoView简单应用

package cn.com.chenzheng_java; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.widget.MediaController; import android.widget.VideoView; import android.widget.MediaCon

梦中一夜下江南 4万+

MediaController+VideoView播放视频实现及play/pause出错时处理

MediaController+VideoView播放视频实现及play/pause出错时处理 MediaController可以用于配合VideoView播放一段视频,它为VideoView提供一个悬浮的操作栏,在操作栏中可以对VideoView播放的视频进行控制,默认情况下,会悬浮显示三秒。它通过MediaController.setMediaPlayer()方法进行指定需要控制的VideoV...

qq_41466437的博客 1357

Android MediaPlayer+SurfaceView+自定义控制器实现视频播放

VideoView继承了SurfaceView同时实现了MediaPlayerControl接口,MediaController则是安卓封装的辅助控制器,带有暂停,播放,停止,进度条等控件。本demo基于Android11开发,实现了简单的视频播放功能,可以拖动进度条,快进/快退和播放上一个视频/播放下一个视频,同时通过悬浮窗的形式查看视频详情。5、将展示视频详情的布局及组件初始化,创建WindowManager对象并设置窗口对应的值,将设置好的值和布局添加进WindowManager对象。

qnako的博客 4519

VideoView常用接口

VideoView常用接口

xie__jin__cheng的博客 1299

VideoView视频组件

VideoView 在Android中是一个用户界面组件,它允许开发者在Android设备的屏幕上播放视频文件。它是Android SDK的一部分,位于android.widget包中。VideoView提供了一种简单的方法来嵌入和控制视频播放,包括设置视频源、开始、暂停、 seek(跳转到视频的特定位置)以及显示视频的控件等基本功能。开发人员可以轻松地将VideoView添加到布局文件中,并通过Java或Kotlin代码来控制其行为。VideoView。

全栈 2261

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1239

第6天使用VideoView+MediaController完成视频播放器(使用内容提供者获得所有视频)

第6天使用VideoView+MediaController完成视频播放器效果图一.项目需求:二.VideoView常用的方法三.MediaPlayer常用的方法:三.画板代码:四.视频代码: 效果图 一.项目需求: 1.播放本地视频:使用内容提供者获得手机上的视频 2.播放网络视频: 3.实现播放/暂停/进度条 二.VideoView常用的方法 VideoView,用于播放一段视频媒体,它继承了...

qq_34178710的博客 1564

删除win10电脑U盘使用记录

手工删除:和查看的方法类似,分三步,缺一不可,顺序也不能反! 第一步 设置环境变量,变量名为“devmgr_show_nonpresent_devices”,值为“1”。 第二步 打开设备管理器,勾上“查看”菜单中的“显示隐藏设备”。如果之前已经打开设备管理器,则要关了,重新打开。 第三步 清除“磁盘驱动器”、“存储卷”、“通用串行总线控制器”3个栏目下所有的灰色的图标,注意是所有!右键点击灰色图标,然后选择“卸载”。 成功 :结果USBSTOR 没有了 ...

qq_40544338的博客 2万+

Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频

工作内容: 1.使用Vitamio框架中的VideoView,MediaController播放本地视频和网络视频 2.自定义MediaController,让其播放控制栏更好用 学习分享:

风吹草低见牛羊 2184

六维力传感器选型指南:电阻式vs电容式,哪个更适合你的工业场景?

本文深入解析六维力传感器在工业自动化中的选型要点,重点对比电阻式与电容式传感器的核心原理、环境适应性及成本结构。针对不同工业场景(如高精度装配、重载机器人等),提供专业选型建议,帮助工程师优化系统性能与经济效益。

weixin_42525005的博客 395

在不同版本Python中安装PyQT5及PyQT5-Tools

在不同版本Python中安装PyQT5及PyQT5-Tools

zoomgu680的博客 2万+

android视频播放(VideoView和MediaController)

1.实现两个接口(OnErrorListener,OnCompletionListener ),并实现两个接口对应的方法。 2.创建一个raw文件夹,里面放一个视频,如video.mp4 先贴上代码: package com.example.testvideo; import android.media.MediaPlayer; import android.media.Medi

朱立火的学习记录 2507

uniApp微信小程序:利用live-pusher人脸活体检测功能+完整示例代码,uniapp使用live-pusher直播推流组件实现人脸验证-活体检测,检测人脸中的动作包括眨眼、张嘴、左右摇头动作

UniApp 使用 live-pusher 实现人脸活体检测(附完整源码)uniapp开发微信小程序人脸检测活体检测,在uni-app的微信小程序项目中使用live-pusher实现人脸识别,uniapp使用live-pusher实现模拟人脸识别效果,张张嘴、眨眨眼、向左摇头、向右摇头等动作,免费使用人脸活体检测的插件方案,uniapp小程序怎么免费使用人脸活体,直播推流,UNIAPP微信小程序使用live-pusher实现人脸识别(拍照)功能,在uni-app项目中实现人脸识别,既使用uni-app中的l

✅ 精选推荐文章 3013

VideoView播放视频

VideoView用于播放视频比MediaPlay和SurfaceView结合播放视频调用要简单的多,只需要设置播放地址就可以启动播放,是一个做简单播放功能的最佳选择。 常用方法: 方法名称 描述 public void setVideoPath (String path) 加载path路径的文件

xiaoke804376088的博客 473

Java全栈开发:充电桩管理系统项目实战

技术收获深入理解分布式系统架构掌握高并发场景解决方案提升系统设计能力经验教训前期需求分析的重要性技术选型需要考虑长期维护测试覆盖率的重要性未来展望引入AI预测故障支持更多支付方式优化用户体验通过此项目的开发,不仅实现了充电桩的智能化管理,也积累了宝贵的全栈开发经验。项目中的很多技术方案和架构设计都具有普遍适用性,可以在其他类似项目中借鉴使用。@Componentstatic {// 初始化状态转换规则。

exlink2012的专栏 1252

基于STM32F4XX 、HAL库的GXHT30C温湿度传感器驱动应用C语言程序设计

define GXHT30C_STATUS_WRITE_CHK (1 << 0) // 写数据校验状态。#define GXHT30C_STATUS_HUMI_TRACK (1 << 11) // 湿度跟踪报警。#define GXHT30C_STATUS_TEMP_TRACK (1 << 10) // 温度跟踪报警。#define GXHT30C_STATUS_CMD_STATUS (1 << 1) // 命令执行状态。

PP_Cottage的博客 227

关于对Android的videoView和mediaController的吐槽

这几天在做视频播放器一直在研究videoview。 videoview是和video连用的。2个组件分别都提供一个方法关联另一方: mediaController-setAnchorView(videoview),videoview-setMediaController(mediaController)。我习惯在一个布局文件中设置好videoview的位置之后,在activity的onCreat

Raleigh 2511

Google Earth Engine(GEE)——全球影像数据正确下载方式和注意事项

今天看到有人担心全球影像能不能下载的问题? 有时候我们会用到全球的数据,但是如何下载全球的数据呢? 首先如果没有全球的矢量边界我们会不会无法下载全球的数据,答案当然是可以的,因为我们在边界筛选的过程中filterBounds(),就是为了筛选边界,当我们不进行边界筛选的时候,自然而然默认的边界范围就是全球的,但是紧接着会面临其他两个问题:1如何下载?2如何在不缩小分辨率的情况下下载成功? 对于第一个问题我们如何下载?还是按照正常的逻辑利用export直接倒出到Google硬盘当中, 代码:

此星光明博客 3771

【Android】使用VideoView播放视频

使用VideoView进行视频播放的demo

m0_56233309的博客 7501

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 6 videoview,Android使用VideoView进行视频播放

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?最近在做一个主播类的App,里面涉及到视频播放,之前没有接触过,在探索一阵后能够播放基本视频了。特此写下小记,方便日后查看。首先,确定使用VideoView进行视频播放。步骤:在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件。调用VideoView的如下两个方法来加载指定的视频:setVi...

weixin_31916125的博客 508

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VideoView

VideoView 一、VideoView简介 在Android中,播放视频有2种方式,第一种方式是使用MediaPlayer结合SurfaceView来播放,通过MediaPlayer来控制视频的播放、暂停、进度等,而通过SurfaceView来显示视频内容;第二种方式是使用VideoView来播放,这个类其实也是**继承了SurfaceView类,并且实现了MediaController.MediaPlayerController这个用于控制媒体播放的接口,另外在VideoView上还有一个用于对媒体

weixin_44666172的博客 701

android之VideoView和视频播放View的扩展

1.概念及扩展   VideoView 是android 系统提供的一个媒体播放显示和控制的控件。其结构层次如下:   原型:VideoView extends SurfaceView implements MediaController.MediaPlayerControl   类结构:       java.lang.Object         ↳ android.view.V

一朶婲 4177

Android实现视频播放的3种实现方式

Android提供了常见的视频的编码、解码机制。使用Android自带的MediaPlayer、MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。这些多媒体数据可以来自于Android应用的资源文件,也可以来自于外部存储器上的文件,甚至可以是来自于网络上的文件流。 下面来说一下视频播放的几种实现方式: 1、MediaController+VideoView实现方式 这种方式是最简单的实现方式。VideoView继承了SurfaceView同时实现了Med

weixin_42602900的博客 8179

安卓开发之视频播放器

首先送各位有缘看到这篇文章的朋友们一句话:努力,总会有收获! 下面开始正题: 视频播放器,谷歌提供了布局控件和api。 布局控件的名字叫做VideoView,该控件也有自己的类,实例化一个该控件对象后,调用findviewbyid方法拿到引用,即可调用该控件的setVideoPath方法设置播放视频的路径,该路径包括本地路径和网上的路径,设置完路径后调用start方法开始播放。我们播放视频的...

Ahacker_L的博客 5618
上一篇: Android24.2.0支持库中的SnapHelper学习和使用
下一篇: Rxjava2入门教程三:Operators操作符
Eric_Bang
博客等级 码龄16年 37粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值