【android安卓】VideoView-安卓多媒体(视频)应用开发初尝试

【android安卓】VideoView-安卓多媒体(视频)应用开发初尝试

这次的Demo学习主要还是基于之前观看Google文档中相关资料;例如:VideoView的api文档

A high level view for media playback that can be integrated with either a SessionPlayer or a MediaController. Developers can easily implement a video rendering application using this class. By default, a MediaControlView is attached so the playback control buttons are displayed on top of VideoView.

简单来说,这个是将其他的如SessionPlayerMediaController整合起来的一个class,主要也是为了多媒体的播放。视频的播放基本还是,播放,暂停,重播!因为是初次接触,所以就简单点,实现以上三个需求即可。
由于这个Demo设计其实和之前的音频Demo大同小异,所以很多代码是有复用的!

UI设计

基本的思路是:一个VideoView专门用来展示视频;三个button分别实现不同的功能!


<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><VideoViewandroid:id="@+id/image_view"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="@id/LinearLayout_1"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.0" /><LinearLayoutandroid:id="@+id/LinearLayout_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toBottomOf="@id/image_view"app:layout_constraintBottom_toBottomOf="parent"><Buttonandroid:id="@+id/button_play"android:layout_weight="1"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="play"/><Buttonandroid:id="@+id/button_pause"android:layout_weight="1"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="pause"/><Buttonandroid:id="@+id/button_stop"android:layout_weight="1"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="stop"/>LinearLayout>androidx.constraintlayout.widget.ConstraintLayout>

业务逻辑

视频播放,然后点击相关按钮实现相应的功能,如播放等等;
不过在这里,我也写了一些申请权限的比较通用的写法,虽然这个的视频资源是直接放在app中但是一般来说视频播放的来源可以是下载该app的手机上自带的,也可以是通过网络服务进行的。主要是起到练习权限申请的相关方式。

package com.example.mediaplayerpractice_2;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private VideoView videoView;private Button buttonPlay;private Button buttonPause;private Button buttonStop;//动态申请权限;private static String[] PERMISSIONS = {"android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"};static boolean FLAG_PERMISSIONS = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initUi();checkPermission();if(FLAG_PERMISSIONS){initVideo();}}private void initVideo() {//读取在raw中的视频文件videoView.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/raw/video"));//解析在raw的本地中的视频资源}private void checkPermission() {//进行权限查询,这个和之前的ContentProvider中的权限申请,很像,可参考!for(String permission : PERMISSIONS){if(ContextCompat.checkSelfPermission(MainActivity.this,permission) != PackageManager.PERMISSION_GRANTED ){//审查权限ActivityCompat.requestPermissions(this,PERMISSIONS,1);}}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case 1:for (int grantResult : grantResults){if(grantResult != PackageManager.PERMISSION_GRANTED){FLAG_PERMISSIONS = false;Toast.makeText(getApplicationContext(),"Permisson is denied!",Toast.LENGTH_SHORT).show();break;}}FLAG_PERMISSIONS = true;break;}}private void initUi() {videoView = findViewById(R.id.image_view);buttonPlay = findViewById(R.id.button_play);buttonPause = findViewById(R.id.button_pause);buttonStop = findViewById(R.id.button_stop);buttonStop.setOnClickListener(this);buttonPause.setOnClickListener(this);buttonPlay.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.button_play:if(!videoView.isPlaying()){videoView.start();}break;case R.id.button_pause:if(videoView.isPlaying()){videoView.pause();}break;case R.id.button_stop:if(videoView.isPlaying()){videoView.resume();//重播}break;default:throw new IllegalStateException("Unexpected value: " + v.getId());}}@Overrideprotected void onDestroy() {super.onDestroy();if(videoView!=null){videoView.suspend();}}
}

请添加图片描述

成品Demo我放在了gitee上可以自行下载研究,如果有用的话,可以跪求一个赞👍吗?


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部