Android-MediaPlayer

简介: Android-MediaPlayer

MediaPlayer

突然觉得这个音乐播放有点意思,我们来做一下吧。

首先我们来一个名为MediaPlayerDemo的项目。

然后再main.xml文件里面创建三个按钮,分别是播放、暂停、停止,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play"/>
    <Button
        android:id="@+id/pause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Pause"/>
    <Button
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop"/>
</LinearLayout>


然后我们进入MainActivity活动页面,代码如下:

package com.example.mediaplayerdemo;
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 java.io.File;
//继承View.OnClickListener,是按钮放在一起更直观,用另一种方法来设置按钮点击监听
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //定义三个按钮并实例化MediaPlayer
    private MediaPlayer mediaPlayer = new MediaPlayer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button play = (Button)findViewById(R.id.play);
        Button pause = (Button)findViewById(R.id.pause);
        Button stop = (Button)findViewById(R.id.stop);
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.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
        }
    }
    /*
    * 初始化MediaPlayer
    * */
    private void initMediaPlayer(){
        try {
            File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
            mediaPlayer.setDataSource(file.getPath());//指定音频文件的路径
            mediaPlayer.prepare();//让MediaPlayer进入到准备状态
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){
         switch (requestCode){
             case 1:
                 if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                     initMediaPlayer();
                 }else {
                     Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
                     finish();
                 }
                 break;
             default:
         }
    }
    @Override
    public void onClick(View v){
        switch (v.getId()){
            case R.id.play:
                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();//开始播放
                }
                break;
            case R.id.pause:
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.pause();//暂停播放
                }
                break;
            case R.id.stop:
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.reset();//停止播放
                    initMediaPlayer();
                }
                break;
            default:
                break;
        }
    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        if(mediaPlayer != null){
            mediaPlayer.stop();
            mediaPlayer.release();
        }
    }
}


接下来我么来解释一下这一段代码,看上去还是挺多的。

在类初始化的时候就创建了一个MediaPlayer的实例,然后在onCreate()方法中进行了运行时权限处理,动态申请WRITE_EXTERNAL_STORAGE权限,因为我们的音乐文件是放在手机SD卡里面,所以需要这个权限来访问SD卡。在AndroidManifest.xml中添加这个权限


20190227231231885.png


20190227232647415.png在onRequestPermissionResult()(你可以把这个方法理解为请求权限结果)方法中,如果你拒绝了这个权限申请,那么就会调用finish方法将程序直接关掉。


用户同意授权之后就会调用initMediaPlayer()方法为MediaPlayer对象进行初始化操作,在initMediaPlayer()方法中,首先是通过创建一个File(文件)对象来指定音频文件的路径,所以我们需要在SD卡的根目录下面放置一个名为music.mp3的音频文件。后面调用setDataSource()和prepare()方法为MediaPlayer做好播放准备。


下面的点击事件中我们对每个按钮进行判断,当点击Play按钮时会进行判断,如果当前MediaPlayer没有正在播放的音频就调用start()方法开始播放。当点击Pause按钮时会进行判断,如果当前MediaPlayer正在播放音频就调用pause()方法暂停播放。当点击Stop按钮时会进行判断,如果当前MediaPlayer正在播放音频就调用reset()方法将MediaPlayer重置为刚刚创建时的状态,然后重新调用一遍initMediaPlayer()方法。


最后在onDestroy()方法中,我们分别调用stop()方法和release()方法,将MediaPlayer相关的资源释放掉。



相关文章
|
编解码 Android开发
Android 使用VideoView播放本地视频详解
Android 使用VideoView播放本地视频详解
520 2
|
3月前
|
Android开发
Android 利用MediaPlayer实现音乐播放
本文提供了一个简单的Android MediaPlayer音乐播放示例,包括创建PlayerActivity、配置AndroidManifest.xml和activity_player.xml布局,以及实现播放和暂停功能的代码。
26 0
Android 利用MediaPlayer实现音乐播放
|
Android开发
Android 使用MediaPlayer和SurfaceView播放视频
Android 使用MediaPlayer和SurfaceView播放视频
166 0
|
XML Android开发 数据格式
Android MediaPlayer音频播放器详解
Android MediaPlayer音频播放器详解
581 0
Android MediaPlayer音频播放器详解
|
XML Java API
Android 了解Activity
Android 了解Activity
115 0
|
Android开发
Android MediaPlayer播放音频与视频
播放音频 首先创建出一个MediaPlayer对象 MediaPlayer mMediaPlayer = new MediaPlayer(); 设置声音源 public static final String FILENAME = "deserve.
1265 0