《第一行代码》笔记(4)——播放音频

package com.zjw.mymultimedia4;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

//8.4.1 p303 播放音频
//一般使用MediaPlayer类
/*
MediaPlayer常用方法:
setDataSource()   设置要播放的音频文件的位置
prepare()         在开始播放之前调用这个方法完成准备工作
start()           开始或继续播放音频
pause()           暂停播放音频
reset()           将MediaPlayer对象重置到刚刚创建的状态
seekTo()          从指定的位置开始播放音频
stop()            停止播放音频。调用这个方法后的MediaPlayer对象无法再播放音频
release()         释放掉与MediaPlayer对象相关的资源
isPlaying()       判断当前MediaPlayer是否正在播放音频
getDuration()     获取载入的音频文件的时长
 */
/*
MediaPlayer工作流程:
1.创建MediaPlayer对象
2.setDataSource()设置音频文件路径
3.prepare()进入准备状态
4.start()开始播放
5.pause()暂停播放
6.reset()停止播放
 */
//主布局:三个Button(播放,暂停,停止)
/*
关于音乐资源文件:
1.这里就在res下新建raw文件夹,丢一个MP3文件进去
2.原书中是放在SD卡上,需要添加运行时权限(这里没写申请权限代码,可参考《第一行代码》笔记(3),同时别忘了还有清单文件里面的权限),initMediaPlayer()代码如下:
mMediaPlayer = new MediaPlayer();(原书是一开始在定义成员变量的时候就new对象了)
File file=new File(Environment.getExternalStorageDirectory(),"riverside.mp3");
mMediaPlayer.setDataSource(file.getPath());
mMediaPlayer.prepare();
3.也可以右击app工程文件名在folder选项中选择assets folder,创建asset文件夹(原始资源)
在此文件夹中加入音乐,在initMediaPlayer()中代码会有所改变,如下:
AssetManager am = getAssets();
AssetFileDescriptor afd = am.openFd("riverside.mp3");
mMediaPlayer = new MediaPlayer();
// 使用MediaPlayer加载指定的声音文件
mMediaPlayer.setDataSource(afd.getFileDescriptor());
mMediaPlayer.prepare();
4.当然还有什么从数据库获取,从网络服务器获取等
 */

public class PlayAudio extends AppCompatActivity {

    private MediaPlayer mMediaPlayer;

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

        initMediaPlayer();
    }

    private void initMediaPlayer() {
        mMediaPlayer = MediaPlayer.create(this, R.raw.riverside);
    }

    //Button点击事件,布局里面设置了android:onClick="click"
    public void click(View v) {
        switch (v.getId()) {
            case R.id.btn_play://开始播放
                if (!mMediaPlayer.isPlaying()) {
                    mMediaPlayer.start();
                }
                break;
            case R.id.btn_pause://暂停播放
                if (mMediaPlayer.isPlaying()) {
                    mMediaPlayer.pause();
                }
                break;
            case R.id.btn_stop://停止播放
                //原书做了是否正在播放的判断,但是如果先按了暂停,再点停止
                //就无法停止播放了(就是再play是继续播放效果,而不是停止后的从头开始播放),所以这里我干脆不做判断了
                /* 原书写法
                if (mMediaPlayer.isPlaying()) {
                   mMediaPlayer.reset();
                    initMediaPlayer();
                }*/
                mMediaPlayer.reset();
                initMediaPlayer();
                break;
            default:
                break;
        }
    }

    //释放资源
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
            mMediaPlayer.release();
        }
    }
}

转载于:https://my.oschina.net/u/3620480/blog/1483877

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值