使用MediaPlayer播放音频

一、从播放本地音乐Demo入手

通过直接new实例化一个MediaPlayer

private MediaPlayer mMediaPlayer;
mMediaPlayer = new MediaPlayer();

在对播放器进行初始配置前首相需要申请文件读写权限,先在清单文件中声明文件读写权限

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

再在代码中动态申请读写权限

//权限判断,如果没有权限就请求权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        } else {
            initMediaPlayer();//初始化播放器 MediaPlayer
        }

如果完全按这样去写出现错误,提示没有权限,一般是由于Scoped Storage导致的,可以在清单文件中加入下面一行解决

    <application
        ...
        android:requestLegacyExternalStorage="true"
        ...>

申请完成后再调用initMediaPlayer()进行初始配置,如果申请权限失败提示信息并退出Activity

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 1) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initMediaPlayer();
            } else {
                Toast.makeText(this, "拒绝权限,将无法使用程序。", Toast.LENGTH_LONG).show();
                finish();
            }
        }

    }

在initMediaPlayer()方法中主要配置需要播放的音乐文件路径,是否循环播放,并初始化播放器。

private void initMediaPlayer() {
        try {
            File file = new File(Environment.getExternalStorageDirectory(), "/music.mp3");
            mMediaPlayer.setDataSource(file.getPath());//指定音频文件路径
            mMediaPlayer.setLooping(false);//设置为循环播放
            mMediaPlayer.prepare();//初始化播放器MediaPlayer
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

通过三个按钮控制音乐的播放、暂停和停止

        mBTPlay = findViewById(R.id.bt_play);
        mBTPause = findViewById(R.id.bt_pause);
        mBTStop = findViewById(R.id.bt_stop);

        mBTPlay.setOnClickListener(v -> {
            Log.i(TAG, "play");
            //如果没在播放中,立刻开始播放。
            if (!mMediaPlayer.isPlaying()) {
                mMediaPlayer.start();
            }
        });
        mBTPause.setOnClickListener(v -> {
            Log.i(TAG, "pause");
            //如果在播放中,立刻暂停。
            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.pause();
            }
        });
        mBTStop.setOnClickListener(v -> {
            Log.i(TAG, "stop");
            //如果在播放中,立刻停止。
            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.reset();
                initMediaPlayer();//初始化播放器 MediaPlayer
            }
        });

在退出Activity之前需要对MediaPlayer的资源进行释放

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

二、MediaPlayer播放器

//TODO:介绍MediaPlayer播放器,播放功能,使用场景

三、附录(完整代码)

activity_play_music.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/bt_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/play" />

    <Button
        android:id="@+id/bt_pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pause" />

    <Button
        android:id="@+id/bt_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/stop" />
</LinearLayout>

PlayerMusicActivity.java文件

public class PlayMusicActivity extends Activity {

    private final String TAG = "PlayMusicActivity";

    private MediaPlayer mMediaPlayer;
    private Button mBTPlay;
    private Button mBTPause;
    private Button mBTStop;


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


        mMediaPlayer = new MediaPlayer();

        //权限判断,如果没有权限就请求权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        } else {
            initMediaPlayer();//初始化播放器 MediaPlayer
        }

        mBTPlay = findViewById(R.id.bt_play);
        mBTPause = findViewById(R.id.bt_pause);
        mBTStop = findViewById(R.id.bt_stop);

        mBTPlay.setOnClickListener(v -> {
            Log.i(TAG, "play");
            //如果没在播放中,立刻开始播放。
            if (!mMediaPlayer.isPlaying()) {
                mMediaPlayer.start();
            }
        });
        mBTPause.setOnClickListener(v -> {
            Log.i(TAG, "pause");
            //如果在播放中,立刻暂停。
            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.pause();
            }
        });
        mBTStop.setOnClickListener(v -> {
            Log.i(TAG, "stop");
            //如果在播放中,立刻停止。
            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.reset();
                initMediaPlayer();//初始化播放器 MediaPlayer
            }
        });
    }

    private void initMediaPlayer() {
        try {
            File file = new File(Environment.getExternalStorageDirectory(), "/music.mp3");
            mMediaPlayer.setDataSource(file.getPath());//指定音频文件路径
            mMediaPlayer.setLooping(false);//设置为循环播放
            mMediaPlayer.prepare();//初始化播放器MediaPlayer
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 1) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initMediaPlayer();
            } else {
                Toast.makeText(this, "拒绝权限,将无法使用程序。", Toast.LENGTH_LONG).show();
                finish();
            }
        }

    }


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

}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值