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