Android学习笔记使用MediaPlay播放音频

什么是MediaPlayer

Android提供的用来控制音频/视频文件或流播放的类,它的使用步骤如下:

代码示范

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final MediaPlayer mandiaPlayer = MediaPlayer.create(this,R.raw.yiluxianbei);
        //创建一个MediaPiaPlayer对象,并且装载音频
        Button btn_play = findViewById(R.id.btn_play);
        Button btn_pause = findViewById(R.id.btn_pause);
        Button btn_stop = findViewById(R.id.btn_stop);
        btn_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mandiaPlayer.start();//开始播放
            }
        });

        btn_pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mandiaPlayer.pause();//暂停播放
            }
        });

        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mandiaPlayer.stop();//停止播发
            }
        });
    }
}

写一个播放页面

布局文件activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:background="@drawable/background"
    tools:context=".MainActivity">
    <!--播放与暂停按钮-->
    <ImageButton
        android:id="@+id/btn_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="@dimen/margin_bottom"
        android:layout_marginLeft="@dimen/margin"
        android:background="@color/btn_Background"
        android:src="@drawable/play"
        />
    <ImageButton
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="@dimen/margin_bottom"
        android:layout_marginRight="@dimen/margin"
        android:background="@color/btn_Background"
        android:src="@drawable/stop" />
</RelativeLayout>
``
开放权限
```xml
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

MainActivty.java

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private boolean isPause = false;//定义是否是暂停状态
    private File file;  //定义要播放的音频文件
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
        ,WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        final ImageView btn_play = findViewById(R.id.btn_play);
        final ImageView btn_stop = findViewById(R.id.btn_stop);
        File file = new File("/sdcard/xiaoban.mp3");//获取要播放的音乐文件
        if(file.exists()){
            //如果音频文件存在就创建一个装载该文件的MediaPlayer对象,不存在将做出提示
            //创建MediaPlayer对象,并解析要播放的音频文件
            mediaPlayer = MediaPlayer.create(this,
                    Uri.parse(file.getAbsolutePath()));
        }else{
            //提示音频文件不存在
            Toast.makeText(MainActivity.this,"要播放的音频文件不存在!",
                    Toast.LENGTH_SHORT).show();
            return;
        }

        /**播放按钮的单击事件监听器**/
        btn_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用play()方法,实现播放功能
                play();
            }
        });
        //为MediaPlayer添加完成事件监听器,实现当音频播放完毕后,重新开始播放音频
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                play();     //调用play()方法,实现播放功能
            }
        });

        btn_play.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onClick(View v) {
                if(mediaPlayer.isPlaying() && !isPause){ //如果音频处于播放状态
                    mediaPlayer.pause();
                    isPause = true;
                    //更换播放图标
                    ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.play,null));
                }else{
                    mediaPlayer.start();//继续播放
                    isPause = false;//设置为播放状态
                    // 更换为暂停图标
                    ((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.pause, null));
                }
            }
        });

        btn_stop.setOnClickListener(new View.OnClickListener(){
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onClick(View v) {
                mediaPlayer.stop();
                btn_play.setImageDrawable(getResources().getDrawable(R.drawable.play,null));
            }
        });

    }

    private void play(){
        try {
            mediaPlayer.reset(); //重置MediaPlayer对象
            mediaPlayer.setDataSource(file.getAbsolutePath());
            mediaPlayer.prepare();
            mediaPlayer.start();    //开始播放
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {    //当前Activity销毁时,停止正在播放的音频,并释放MediaPlayer所占用的资源
        if(mediaPlayer.isPlaying()) {   //如果音频出于播放状态
            super.onDestroy();  //停止音频播放状态
        }
        mediaPlayer.release();  //释放资源
        super.onDestroy();
    }
}

效果截图:

猜你喜欢

转载自www.cnblogs.com/lzpq/p/13166873.html