1.效果展示:
点击选择视频按钮后:
点击用相册打开后:
点击视频列表中的某个视频,会返回APP并自动播放所选视频
2.三步实现:
- 跳转到本地视频列表
- 点击想播放的视频,带回所选视频数据
- 播放该视频,可通过视频地址进行其他处理
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