zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    

    效果截图:

    最后附上源码地址:
    https://gitee.com/peterLiz/android_learning.git

    最后如果有老板想做项目欢迎找我QQ:599490685

  • 相关阅读:
    在不打开excel的情况下用python执行excel
    Python中xlrd、xlwt、win32com模块对xls文件的读写操作
    [已解决]报错:have mixed types. Specify dtype option on import or set low_memory=False
    [已解决]报错:xlrd.compdoc.CompDocError: Workbook: size exceeds expected 17920 bytes; corrupt?
    使用Pandas读取大型Excel文件
    [转]jmeter实战
    webService(SOAP)性能测试脚本
    jmeter正则表达式提取器--关联
    Data Set Config配置元件
    压力测试涉及到的参数
  • 原文地址:https://www.cnblogs.com/lzpq/p/13166873.html
Copyright © 2011-2022 走看看