Android 从本地选择视频,用APP播放或进行其他处理

news/2024/11/22 12:16:45/

1.效果展示:

点击选择视频按钮后:

点击用相册打开后:

点击视频列表中的某个视频,会返回APP并自动播放所选视频

2.三步实现:

  1. 跳转到本地视频列表
  2. 点击想播放的视频,带回所选视频数据
  3. 播放该视频,可通过视频地址进行其他处理

3.直接上代码:

        Activity:

class VideoActivity(override val mContentView: Int = R.layout.activity_video) : BaseActivity() {private var mVideoListCode = 321private var mVideoView: VideoView? = nullprivate var mPlayView: View? = nulloverride fun initView() mVideoView = findViewById(R.id.video_view)mPlayView = findViewById(R.id.play_view)}override fun initData() {LogUtil.e("initData")//自动开始播放startVideo()}@RequiresApi(Build.VERSION_CODES.R)override fun initListener() {//播放器点击mVideoView?.setOnClickListener {if (mVideoView?.isPlaying == true) {mVideoView?.pause()mPlayView?.visibility = View.VISIBLE} else {mVideoView?.start()mPlayView?.visibility = View.GONE}}//点击跳转视频列表,然后点击视频返回视频地址findViewById<View>(R.id.video_go_list).setOnClickListener {val intent = Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)startActivityForResult(intent, mVideoListCode)}}private var mVideoPath: String? = nullprivate fun startVideo() {mVideoView?.reset()mVideoView?.mediaPlayer = SystemMediaPlayer().apply {if (mVideoPath != null) {setDataSource(this@VideoActivity, Uri.fromFile(File(mVideoPath ?: "")))} else {setDataSource(this@VideoActivity,Uri.parse("https://vod.pipi.cn/fe5b84bcvodcq1251246104/658e4b085285890797861659749/f0.mp4"))}}mVideoView?.prepare()mVideoView?.start()}@Deprecated("Deprecated in Java") //返回选择的视频override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (requestCode == mVideoListCode) {data?.data?.let {mPlayView?.visibility = View.GONE //隐藏封面val uri: Uri? = data.data//数据库查询操作。val cursor: Cursor? =uri?.let { it1 -> contentResolver.query(it1, null, null, null, null) };if (cursor != null) {if (cursor.moveToFirst()) {mVideoPath = cursor.getString(// 视频路径:MediaStore.Audio.Media.DATAcursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA))}cursor.close();}startVideo()}}super.onActivityResult(requestCode, resultCode, data)}}

        Layout:

<?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:background="@color/purple"android:orientation="vertical"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><org.salient.artplayer.ui.VideoViewandroid:id="@+id/video_view"android:layout_width="match_parent"android:layout_height="300dp" /><ImageViewandroid:id="@+id/play_view"android:src="@mipmap/play_view"android:layout_width="match_parent"android:padding="120dp"android:visibility="gone"android:background="@color/black3"android:layout_gravity="center"android:layout_height="match_parent" /></FrameLayout><Buttonandroid:id="@+id/video_go_list"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选择视频"/></LinearLayout>

4.所用资源或疑问解答:

        BaseActivity?

        详细代码和说明看这里:

Android BaseActivity抽象举例_android 抽象类 实例化-CSDN博客文章浏览阅读340次,点赞2次,收藏2次。该博客介绍了一个Android BaseActivity的抽象基类,用于统一管理状态栏颜色和逻辑,包括设置无标题、初始化ImmersionBar、重写onNewIntent方法以及简化启动新Activity的函数。同时提供了不使用ImmersionBar时的状态栏自定义方案。子Activity可以通过继承此类来复用这些功能。https://blog.csdn.net/qq_39731011/article/details/120524336

        VideoView ?视频播放器

        引入方法和使用指南看这里:
Android 超简洁的视频播放器推荐 ArtPlayer-CSDN博客文章浏览阅读1.3w次,点赞36次,收藏59次。深海最近做视频相关需求的时候, 在GitHub上找到的一个播放器:ArtPlayer 相对比其他三方的播放器来说,更加简洁和易扩展.支持内核替换ijkPlayer支持ExoPlayer支持GitHub 地址:https://github.com/maiwenchang/ArtPlayer使用起来有多简单呢? 看代码:首先加入这些依赖 别问我为什么有3个 ..._artplayerhttps://zhaoxinghai.blog.csdn.net/article/details/90672491

   

http://www.ppmy.cn/news/1549029.html

相关文章

基于SpringBoot+Vue的影院管理系统(含演示视频+运行截图+说明文档)

web启动链接地址&#xff1a; http://localhost:8082&#xff08;管理端&#xff09; http://localhost:8081&#xff08;用户端&#xff09; http://localhost:8082&#xff08;员工端&#xff09; 一、项目介绍 基于框架的系统&#xff0c;系统分为用户、员工和管理员三个…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波&#xff08;Ensemble Kalman Filter&#xff09; 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波&#xff08;Ensemble Kalman Filter, EnKF&#xff09;是…

scPair:隐式特征选择提高single-cell paired多模态分析

配对多模态单细胞分析可在同一细胞中分析多模态特征&#xff0c;用于识别染色质和 mRNA 模态互补的细胞状态以及将调控元件与靶基因联系起来。然而&#xff0c;与单模态分析相比&#xff0c;输入特征的高维度和较浅的测序深度给数据分析带来了挑战。在这里&#xff0c;作者介绍…

USRP X410 价格

价格 官方网站&#xff1a;https://www.ni.com/zh-cn/shop/model/ettus-usrp-x410.html 注意&#xff1a; 官方的价格不含税。 市场价&#xff1a;229475*1.13 259307 打折7折&#xff1a;259307 * 0.7 181514.9

Python 之网络爬虫

一.认识HTML 1.什么是HTML &#xff08;HyperText Markup Language&#xff09; HTML是超文本标记语言的缩写&#xff0c;它包含一系列的标签&#xff0c; “超文本”是一种组织信息的方式&#xff0c;利用HTML标记&#xff0c;告诉浏览器被标记的内容如何显示到浏览器页面上…

STM32编程遇到的问题随笔【一】

STM32编程遇到的问题随笔【一】 一、PB4引脚输出一直为高&#xff0c;无论怎么拉低都不起作用 原因PB4和PB3是复用引脚&#xff0c;用于JTAG调试&#xff0c;芯片是默认开启JTAG功能的&#xff0c;如果我们需要用到这两个引脚&#xff0c;必须降JTAG调试功能关闭&#xff0c;…

11.21Scala

import java.io.PrintWriter import scala.io.Source object ddd1 {def main(args: Array[String]): Unit {//读入文件内容val content Source.fromFile("dd.txt").mkStringprintln(content)//2.把字符串拆分为一个一个的单词&#xff0c;保存到数组//正则表达式//…