背景音乐通常播放时间较长,且文件体积也相对较大。这类资源如果放在内存中,一方面给硬件资源本身就很紧缺的手机造成了负担,另一方面通常也没有这方面的需求,放在内存中,在调用时播放速度较快,而长时音乐文件通常作为背景音乐,速度稍微慢一些并不会影响太大。
android.media.MediaPlayer类是Android中用来控制音频,以及视频的类。应用该类,可以轻松实现对音频的处理。
MediaPlayer各个状态间关系如图:Idle状态为空闲,Initialized状态为初始化,Idle状态加载了音频资源后进入Initialized状态,之后调用prepare()方法就可以进入Prepared状态。在Prepared状态调用start()方法便可播放音乐。
音量的控制是播放音乐中常常用到的,Android中通过AudioManager类来控制音量:
AudioManager通过Context.getSystemService(Context.AUDIO_SERVICE)方法得到调用其他类的实例
public void adjustVolume(int derection, int flags)方法可以调节音量,direction为调节的方向,ADJUST_LOWER减小音量、ADJUST_RAISE增大音量、ADJUST_SAME保持音量不变。flags为标记、通常设置为0
public int getStreamMaxVolume(int streamType)方法得到最大音量
public int getStreamVolume(int stereamType)方法得到当前音量
下面通过一个简单的例子说明:
package wyf.zcl; import android.app.Activity; //引入相关包 import android.media.AudioManager; //引入相关包 import android.media.MediaPlayer; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button bPlay; //播放按钮 private Button bPause; //暂停按钮 private Button bStop; //停止按钮 private Button bAdd; //增大音量 private Button bReduce; //降低音量 private boolean pauseFlag=false; //暂停标记,true暂停态,false非暂停态 MediaPlayer mp; //MediaPlayer引用 AudioManager am; //AudioManager引用 @Override public void onCreate(Bundle savedInstanceState) { //Activity创建时调用 super.onCreate(savedInstanceState); setContentView(R.layout.main); //设置Activity的显示内容 bPlay=(Button)findViewById(R.id.ButtonPlay); //播放按钮的实例化 bPause=(Button)findViewById(R.id.ButtonPause); //暂停按钮的实例化 bStop=(Button)findViewById(R.id.ButtonStop); //停止按钮的实例化 bAdd=(Button)findViewById(R.id.ButtonVAdd); //增大音量按钮的实例化 bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按钮的实例化 mp=new MediaPlayer(); am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE); bPlay.setOnClickListener(new View.OnClickListener() {//播放按钮的监听器 @Override public void onClick(View v) { try{ mp.setDataSource("/sdcard/dl.mid"); //加载音频,进入Initialized状态。 }catch(Exception e){e.printStackTrace();} try{ mp.prepare(); //进入prepared状态。 }catch(Exception e){e.printStackTrace();} mp.start(); //播放音乐 Toast.makeText(MyActivity.this, "播放音乐", Toast.LENGTH_SHORT).show(); }}); bPause.setOnClickListener(new View.OnClickListener() { //暂停按钮添加监听器 @Override public void onClick(View v) { if(mp.isPlaying()){ //如果是在播放态 mp.pause(); //调用暂停方法 pauseFlag=true; //设置暂停标记 }else if(pauseFlag){ mp.start(); //播放音乐 pauseFlag=false; //设置暂停标记 Toast.makeText(MyActivity.this, "暂停播放", Toast.LENGTH_SHORT).show(); }} }); bStop.setOnClickListener(new View.OnClickListener() { //停止按钮添加监听器 @Override public void onClick(View v) { mp.stop(); //停止播放 mp.reset(); //重置状态到uninitialized态 try{ mp.setDataSource("/sdcard/dl.mid"); //加载音频,进入Initialized状态。 }catch(Exception e){e.printStackTrace();} try{ mp.prepare(); //进入prepared状态。 }catch(Exception e){e.printStackTrace();} Toast.makeText(MyActivity.this, "停止播放", Toast.LENGTH_SHORT).show(); }}); bAdd.setOnClickListener(new View.OnClickListener() { //音量增大按钮添加监听器 @Override public void onClick(View v) { am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量 System.out.println("faaa"); Toast.makeText(MyActivity.this, "增大音量", Toast.LENGTH_SHORT).show(); }}); bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按钮添加监听器 @Override public void onClick(View v) { am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //减小音量 Toast.makeText(MyActivity.this, "减小音量", Toast.LENGTH_SHORT).show(); }}); } }
代码:http://download.csdn.net/detail/lxq_xsyu/6268203
代码中的音频:
运行结果: