Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

  • 准备
      • 1.储存在raw文件夹
      • 2.储存在assets文件夹
  • 1.音频
    • 1.播放音乐
    • 2.暂停音乐
    • 3.继续播放音乐
    • 4.获取播放时间
    • 5.快进到指定位置
    • 6.变速播放
    • 7.播放data/data/目录下的音频文件
    • 8.播放网络歌曲

Android 入门第八讲02-WebView的高级用法(Android调用 JS 代码( loadUrl 方法,案例练习),JS调用 Android 代码,流行框架总结,跨平台技术)

Android里面的多媒体主要是两部分,第一部分是音频和视频,第二部分是动画(帧动画,补间动画,属性动画)

准备

先导入我们需要用到的音频文件和视频文件

1.储存在raw文件夹

第一步,创建raw文件夹

导入文件

2.储存在assets文件夹

第一步,创建assets文件夹

第二步导入文件

1.音频

1.播放音乐

第一步,添加播放音乐按钮

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="106dp"
        android:text="播放音乐"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第1张图片
第二步,通过MediaPlayer来播放音乐

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第2张图片


public class MainActivity extends AppCompatActivity {
    MediaPlayer mMediaPlayer;

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

        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //播放音乐
                mMediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.a1);
                mMediaPlayer.start();
            }
        });
        
    }
}

运行(这里动态图没有声音,但可以仔细观察,右下角录屏软件悬浮球,一开始是静止的,在点击播放音乐后,有音频波浪变化)

2.暂停音乐

第一步,添加停止播放的按钮
复制代码到之前的布局代码的下面

 
       <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="116dp"
        android:layout_marginEnd="40dp"
        android:layout_marginRight="40dp"
        android:text="暂停音乐"
        app:layout_constraintBottom_toBottomOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第3张图片

第二步,调用pause方法暂停音乐
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第4张图片

 Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {

          
            @Override
            public void onClick(View v) {
                //暂停音乐
                mMediaPlayer.pause();

            }
        });

运行(仔细看悬浮球,在点击暂停后音频波浪不再变化)

但是这里暂停以后再点击播放音乐,会重新加载音乐,也就是从头播放音乐,这个问题下面来解决

3.继续播放音乐

实际上很简单,只需要加一个if判断语句,只在mMediaPlayer==null重新加载文件,不等于空时直接播放,不需要重新加载

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第5张图片

 Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMediaPlayer == null) {
                    mMediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.a1);
                }
                //播放音乐

                mMediaPlayer.start();
            }
        });

运行(这里好像不能证明是继续播放,哈哈,相信我,一定可以的)


还有一个问题(如果我们运行程序后直接点击暂停文件,会出现闪退)

原因在于,因为一开始我们没有点击播放音乐的话,实际上就没有加载MediaPlayer加载文件,所以直接点击暂停音乐会报空指针错误

解决方法,用if判断,只在MediaPlayer不为空的时候调用pause方法

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第6张图片

 Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //因为一开始没有播放音乐的时候,实际上就没有加载音频文件,所以点击暂停会报空指针
                if (mMediaPlayer !=null) {
                    //暂停音乐
                    mMediaPlayer.pause();
                }


            }
        });

4.获取播放时间

在实现一个进度条的时候,需要获取歌曲当前播放时间和歌曲的总时长

 			  //获取音乐当前播放的时间
                    Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");
                    //获取音乐总时长
                    Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第7张图片

5.快进到指定位置

在实现一个拖动进度条来改变音乐播放的位置时,我们需要音乐跳到指定位置,需要用到seekto 这个方法

  Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //快进到50秒的位置
                mMediaPlayer.seekTo(50*1000);
                //获取音乐当前播放的时间
                Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");
                //获取音乐总时长
                Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");

            }
        });

运行(点击暂停按钮(实际上是快进),可以看打印日志,音乐快进到了50秒的位置)

6.变速播放


  
        Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(View v) {

                PlaybackParams playbackParams=mMediaPlayer.getPlaybackParams();
                playbackParams.setSpeed(3.0f);//  3 倍速播放
                mMediaPlayer.setPlaybackParams(playbackParams);


                //获取音乐当前播放的时间
                Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");
                //获取音乐总时长
                Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");

            }
        });

这里报了个错,表示只有在手机版本在23或者以上才能运行
在这里插入图片描述
我们只需要按住alt+enter,添加注释就可以了
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第8张图片

运行(可以发现两次播放时间跨度比正常时间大)

7.播放data/data/目录下的音频文件

第一步,上传文件

第二步,拿到音频文件的位置,并且捕获异常
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第9张图片

  Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMediaPlayer == null) {
                    mMediaPlayer=new MediaPlayer();
                    try {
                        mMediaPlayer.setDataSource("data/data/com.c201801020224.myapplication/a1.mp3");
                        mMediaPlayer.prepare();//先缓冲一下
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                //播放音乐

                mMediaPlayer.start();
            }
        });

运行

8.播放网络歌曲

第一步,添加权限

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

application结点下添加

android:usesCleartextTraffic="true"

在这里插入图片描述
第二步,获取网络歌曲
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第10张图片

        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMediaPlayer == null) {
                    mMediaPlayer=new MediaPlayer();
                    try {
                        mMediaPlayer.setDataSource("http://148.70.46.9/123.mp3");//网络歌曲地址
                       mMediaPlayer.prepareAsync();//异步缓冲
                        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {//监听是否缓冲完毕,缓冲完成再播放音乐
                            @Override
                            public void onPrepared(MediaPlayer mp) {
                                //播放音乐
                                mMediaPlayer.start();
                            }
                        });
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        });

第三步,卸载应用(因为添加了权限,所以需要重新生成应用)
在这里插入图片描述
第四步,运行(可能开始缓冲会比本地速度慢一点)

关于音频播放就先讲到这里啦,下一讲我们讲视频播放,谢谢您的阅读。
附一张麦迪帅照
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)_第11张图片
Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)

你可能感兴趣的:(Android,入门(全),安卓,移动开发,android)