Android学习之播放背景音乐
由于布局页面中只有1个Button按钮,所以此处不再提供布局代码,播放背景音乐的主要代码如下:
/*注意: * SoundPool仅适合用于操作短促、密集的 音效*/ package cn.eoe.playsound; import java.io.IOException; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.SoundPool; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private Button btnPlaySound,btnPlaySong; private MediaPlayer mp = null; private SoundPool sp; private int soundId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*获取SoundPool对象,只有在获取对象之后才能以SoundPool操作声音资源*/ sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); /* 使用load()方法 加载声音资源, 返回值为该声音的id * 必须放在onCreate()方法内部吗? * 此处仅证实了放在onClick方法内无法成功加载声音资源*/ soundId = sp.load(MainActivity.this, R.raw.note1, 1); btnPlaySound = (Button) findViewById(R.id.btnPlaySound); btnPlaySound.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { /*SoundPool()第一个参数是声音数量 * 第二个参数是声音类型, 【AudioManger.具体参数】 代表了什么 * 第三个参数是声音的品质【一般情况下用0,那么0代表了什么】 * */ /*放在此处无法加载文件吗??为什么无法播放*/ // sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); // soundId = sp.load(MainActivity.this, R.raw.note1, 1); sp.play(soundId, 1, 1, 1, 0, 2.0f); /* 最后一个参数rate的值为2.0f 表示这是一个浮点型的数据 * rete代表播放比率,取值返回在0.5--2.0 * 其中: 1为正常比率(声音正常) 1以下(声音低且长) 1以上(声音高且端)*/ } }); btnPlaySong = (Button) findViewById(R.id.btnPlaySong); btnPlaySong.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { /*播放MediaPlayer加载的音频*/ // playSong(); // mp.start(); if(mp!=null){/*为什么要在此处添加判断*/ mp.start(); } } }); } /*出错,start方法执行不到*/ // public void playSong(){ // if(mp == null){ // /*获取MediaPlayer对象实例*/ // mp = new MediaPlayer(); // /*通过MediaPlayer提供的 静态方法create() "装载"音频 // * ====需要注意的是,此处并未真正装载, // * 需要调用MediaPlayer对象的 prepare()方法"准备" 才是真正装载音频*/ // mp = MediaPlayer.create(this, R.raw.song); // System.out.println(">>>>>>>start()方法执行了吗"); // try { // /*为MediaPlayer对象装载音频*/ // mp.prepare(); // /* 播放:start() 暂停:pause() 停止:stop()*/ // mp.start(); // System.out.println(">>>>>>>start()方法执行了"); // // } catch (IllegalStateException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // } // // } @Override /*根据activity的生命周期来看,第一次启动时,程序会运行到onResume()方法 * * 在程序进入运行状态前,加载完MediaPlayer所需的音频 * */ protected void onResume() { /*为什么不能加入if语句中?????????????????????????????????????? * 加入 if语句中会出现IllegalStateException异常,这是什么异常,为什么会出现*/ // if(mp == null){ //// mp = new MediaPlayer(); // mp = MediaPlayer.create(this, R.raw.song); // } /*从if语句中提出以后,可以运行,但在logcat日志中会有警告,如何消除?/*/ mp = MediaPlayer.create(this, R.raw.song); try { mp.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } super.onResume(); } @Override /*在程序暂停时,停止MediaPlayer播放的音频,并释放资源*/ protected void onPause() { if(mp!=null){ // mp.stop(); mp.release();/*释放占用的资源*/ } super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
代码中附上了小编初学时遇到的问题,供大家参考.
浙公网安备 33010602011771号