如何在 Android 中构建视频播放器的完整指南
本文介绍了如何使用 Android Studio 构建视频播放器的逐步过程。
对于在 android 中观看视频,有一个名为“ MediaPlayer ”的特殊类。在本文中,我们将有两个视频,它们通过“对话框”连接,即第一个视频完成后会出现一个对话框,询问用户是否要重播或播放下一个视频。
要在 Android 中插入视频,我们放入raw 文件夹。 “raw”文件夹存在于
"app"--> "res" --> "raw"
在此文件夹中,您只需粘贴要播放的视频即可。
构建视频播放器的步骤:
- 在创建前端时,我们只需要一个组件,即 VideoView。
- 播放、快退、快进等图标只有在我们触摸 VideoView 时才会出现,它们只会出现 3 秒钟,然后它们就会消失。它由 Google 提供,是它的默认行为。
- 来到后端部分,即Java编码,我们通过以下方式获得媒体控制:
vw.setMediaController(new MediaController(this));
- 然后,将原始文件夹的视频添加到 ArrayList 中,并通过向其提供第一个视频的参数来调用名为 setVideo() 的方法。
// big video songs are not running
videolist.add(R.raw.faded);
videolist.add(R.raw.aeroplane);
setVideo(videolist.get(0)); - 现在在 setVideo() 定义中,我们需要一个 Uri 对象以便传递给一个名为 setVideoURI() 的方法。所以,
String uriPath = “android.resource://” + getPackageName() +”/” + id ;
Uri uri = Uri.parse(uriPath);
vw.setVideoURI(uri);
vw.start();注意:第一个视频将在应用程序启动后立即开始播放。这是因为我们从 onCreate() 内部调用 setVideo(),然后在 setVideo() 内部调用 vw.start(),其中 vw 是 VideoView。
- 现在,生成对话框的代码在名为 onCompletion() 的方法中完成。如何生成对话框请参考这篇文章
// It is creating object of AlertDialog
AlertDialog.Builder obj = new AlertDialog.Builder(this); - 最后,我们处理了用户动作的编码,即用户点击了什么(重播或下一步)。使用简单的逻辑,例如递增和递减。
public void onClick(DialogInterface dialog, int which) { if (which == -1) { vw.seekTo(0); vw.start(); } else { ++currvideo; if (currvideo == videolist.size()) currvideo = 0; setVideo(videolist.get(currvideo)); } }
上述程序的完整代码(activity_main 和 MainActivity)如下所示:
activity_main.xml
MainActivity.java
package com.example.videoapp_demo;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import java.util.ArrayList;
public class MainActivity
extends AppCompatActivity
implements MediaPlayer.OnCompletionListener {
VideoView vw;
ArrayList videolist = new ArrayList<>();
int currvideo = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vw = (VideoView)findViewById(R.id.vidvw);
vw.setMediaController(new MediaController(this));
vw.setOnCompletionListener(this);
// video name should be in lower case alphabet.
videolist.add(R.raw.middle);
videolist.add(R.raw.faded);
videolist.add(R.raw.aeroplane);
setVideo(videolist.get(0));
}
public void setVideo(int id)
{
String uriPath
= "android.resource://"
+ getPackageName() + "/" + id;
Uri uri = Uri.parse(uriPath);
vw.setVideoURI(uri);
vw.start();
}
public void onCompletion(MediaPlayer mediapalyer)
{
AlertDialog.Builder obj = new AlertDialog.Builder(this);
obj.setTitle("Playback Finished!");
obj.setIcon(R.mipmap.ic_launcher);
MyListener m = new MyListener();
obj.setPositiveButton("Replay", m);
obj.setNegativeButton("Next", m);
obj.setMessage("Want to replay or play next video?");
obj.show();
}
class MyListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which)
{
if (which == -1) {
vw.seekTo(0);
vw.start();
}
else {
++currvideo;
if (currvideo == videolist.size())
currvideo = 0;
setVideo(videolist.get(currvideo));
}
}
}
}
主要活动。Java
package com.example.videoapp_demo;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import java.util.ArrayList;
public class MainActivity
extends AppCompatActivity
implements MediaPlayer.OnCompletionListener {
VideoView vw;
ArrayList videolist = new ArrayList<>();
int currvideo = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vw = (VideoView)findViewById(R.id.vidvw);
vw.setMediaController(new MediaController(this));
vw.setOnCompletionListener(this);
// video name should be in lower case alphabet.
videolist.add(R.raw.middle);
videolist.add(R.raw.faded);
videolist.add(R.raw.aeroplane);
setVideo(videolist.get(0));
}
public void setVideo(int id)
{
String uriPath
= "android.resource://"
+ getPackageName() + "/" + id;
Uri uri = Uri.parse(uriPath);
vw.setVideoURI(uri);
vw.start();
}
public void onCompletion(MediaPlayer mediapalyer)
{
AlertDialog.Builder obj = new AlertDialog.Builder(this);
obj.setTitle("Playback Finished!");
obj.setIcon(R.mipmap.ic_launcher);
MyListener m = new MyListener();
obj.setPositiveButton("Replay", m);
obj.setNegativeButton("Next", m);
obj.setMessage("Want to replay or play next video?");
obj.show();
}
class MyListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which)
{
if (which == -1) {
vw.seekTo(0);
vw.start();
}
else {
++currvideo;
if (currvideo == videolist.size())
currvideo = 0;
setVideo(videolist.get(currvideo));
}
}
}
}
输出:
- 播放第一个视频:
- 第一个视频后的对话框:
- 播放第二个视频: