Android 学习之《第一行代码》第二版 笔记(二十)播放多媒体文件

通过点击按钮实现播放、暂停和关闭(重置)音频和视频

一、知识点

1. 音频

在Android中一般使用MediaPlayer类来实现播放音频文件。

方法名 功能描述
setDataSource() 设置要播放的音频文件的位置
prepare() 在开始播放之前调用这个方法完成准备工作
start() 开始或继续播放音频
pause() 暂停播放音频
reset() 将MediaPlayer对象重置到刚刚创建的状态
seekTo() 从指定位置开始播放音频
stop() 停止播放音频。调用这个方法后的MediaPlayer对象无法再播放音频
release() 释放掉与MediaPlayer对象相关的资源
isPlaying() 判断当前MediaPlayer是否正在播放音频
getDuration() 获取载入的音频文件的时长

2. 视频

主要使用VideoView类来实现,这个类将视频的显示和控制集于一身。这个类只是帮我们做了一个很好的封装,它的背后仍然是使用MediaPlayer来对视频文件进行控制的。

方法名 功能描述
setVideoPath() 设置要播放的视频文件的位置
start() 开始或继续播放视频
pause() 暂停播放视频
resume() 将视频重头开始播放
seekTo() 从指定位置开始播放视频
isPlaying() 判断当前是否正在播放视频
getDuration() 获取载入的视频文件的时长

二、Demo

1. 效果图

Android 学习之《第一行代码》第二版 笔记(二十)播放多媒体文件_第1张图片
Android 学习之《第一行代码》第二版 笔记(二十)播放多媒体文件_第2张图片

2. activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.thinkpad.mediaplayer.MainActivity">

    <Button
        android:id="@+id/play_music"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="播放音乐"/>
    <Button
        android:id="@+id/pause_music"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="暂停音乐"/>
    <Button
        android:id="@+id/stop_music"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="关闭音乐"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>

    <Button
        android:id="@+id/play_video"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="播放视频"/>
    <Button
        android:id="@+id/pause_video"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="暂停视频"/>
    <Button
        android:id="@+id/replay_video"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="重置视频"/>
    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
LinearLayout>

3. MainActivity.java

import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private MediaPlayer mediaPlayer = new MediaPlayer(); //创建MediaPlayer对象

    //各个控件
    private Button playMusic;
    private Button pauseMusic;
    private Button stopMusic;
    private Button playVideo;
    private Button pauseVideo;
    private Button replayVideo;
    private VideoView videoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //实例化控件对象
        playMusic = (Button)findViewById(R.id.play_music);
        pauseMusic = (Button)findViewById(R.id.pause_music);
        stopMusic = (Button)findViewById(R.id.stop_music);
        playVideo = (Button)findViewById(R.id.play_video);
        pauseVideo = (Button)findViewById(R.id.pause_video);
        replayVideo = (Button)findViewById(R.id.replay_video);
        videoView = (VideoView)findViewById(R.id.video_view);

        //设置点击对象
        playMusic.setOnClickListener(this);
        pauseMusic.setOnClickListener(this);
        stopMusic.setOnClickListener(this);
        playVideo.setOnClickListener(this);
        pauseVideo.setOnClickListener(this);
        replayVideo.setOnClickListener(this);

        //运行时权限检查
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            },1);
        }else{
            initMediaPlayer();//初始化MediaPlayer
            initVideoPath();//初始化Viedo
        }
    }

    //初始化MediaPlayer
    private void initMediaPlayer(){
        try{
            File file = new File(Environment.getExternalStorageDirectory(),"xsdhls.mp3");
            mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径
            mediaPlayer.prepare();//让MediaPlayer进入到准备状态
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //初始化Video
    private void initVideoPath(){
        File file = new File(Environment.getExternalStorageDirectory(),"如约而至许嵩.mp4");
        videoView.setVideoPath(file.getPath());
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    initMediaPlayer();
                    initVideoPath();
                } else {
                    Toast.makeText(this, "你选的嘛偶像!", Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
        }
    }

    @Override
    public void onClick(View v){
        switch (v.getId()){
            case R.id.play_music:
                if (!mediaPlayer.isPlaying()){
                    mediaPlayer.start();//开始播放音乐
                }
                break;
            case R.id.pause_music:
                if (mediaPlayer.isPlaying()){
                    mediaPlayer.pause();//暂停音乐
                }
                break;
            case R.id.stop_music:
                if (mediaPlayer.isPlaying()){
                    mediaPlayer.reset(); //停止音乐
                    initMediaPlayer();
                }
                break;
            case R.id.play_video:
                if (!videoView.isPlaying()){
                    videoView.start();//开始播放视频
                }
                break;
            case R.id.pause_video:
                if (videoView.isPlaying()){
                    videoView.pause();//暂停播放视频
                }
                break;
            case R.id.replay_video:
                if (videoView.isPlaying()){
                    videoView.resume();//重新播放视频
                }
                break;
            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null){
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        if (videoView != null){
            videoView.suspend();
        }
    }
}

4. AndroidManifest.xml

添加权限说明

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

整理学习自郭霖大佬的《第一行代码》
目前小白一名,持续学习Android中,如有错误请批评指正!

你可能感兴趣的:(Android,《第一行代码》)