📜  如何在 Android 中构建视频播放器的完整指南

📅  最后修改于: 2022-05-13 01:54:20.956000             🧑  作者: Mango

如何在 Android 中构建视频播放器的完整指南

本文介绍了如何使用 Android Studio 构建视频播放器的逐步过程。
对于在 android 中观看视频,有一个名为“ MediaPlayer ”的特殊类。在本文中,我们将有两个视频,它们通过“对话框”连接,即第一个视频完成后会出现一个对话框,询问用户是否要重播或播放下一个视频。
要在 Android 中插入视频,我们放入raw 文件夹。 “raw”文件夹存在于

"app"--> "res" --> "raw"

在此文件夹中,您只需粘贴要播放的视频即可。
构建视频播放器的步骤:

  1. 在创建前端时,我们只需要一个组件,即 VideoView。
  2. 播放、快退、快进等图标只有在我们触摸 VideoView 时才会出现,它们只会出现 3 秒钟,然后它们就会消失。它由 Google 提供,是它的默认行为。
  3. 来到后端部分,即Java编码,我们通过以下方式获得媒体控制:

  4. 然后,将原始文件夹的视频添加到 ArrayList 中,并通过向其提供第一个视频的参数来调用名为 setVideo() 的方法。
  5. 现在在 setVideo() 定义中,我们需要一个 Uri 对象以便传递给一个名为 setVideoURI() 的方法。所以,

    注意:第一个视频将在应用程序启动后立即开始播放。这是因为我们从 onCreate() 内部调用 setVideo(),然后在 setVideo() 内部调用 vw.start(),其中 vw 是 VideoView。

  6. 现在,生成对话框的代码在名为 onCompletion() 的方法中完成。如何生成对话框请参考这篇文章
  7. 最后,我们处理了用户动作的编码,即用户点击了什么(重播或下一步)。使用简单的逻辑,例如递增和递减。
    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));
            }
        }
    }
}

输出:

  • 播放第一个视频:
    第一首歌“褪色”

    第一首歌“褪色”

  • 第一个视频后的对话框:
    完成第一首歌曲后,对话框正在生成

    完成第一首歌曲后,对话框正在生成

  • 播放第二个视频:
    当我们点击“NEXT”时,第二个视频开始运行

    当我们点击“NEXT”时,第二个视频开始运行