首先创建一个专门用来播放音乐文件(在这里只播放已经导入到res/raw/下的音频文件)的类
MusicPlayer
public class MusicPlayer implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {; private MediaPlayer bgPlayer; public MusicPlayer(Context context) { this.context = context; } //当音乐播放完毕时 public void onCompletion(MediaPlayer mp) { stopBgSound(); } //当音乐播放发生错误时 public boolean onError(MediaPlayer mp, int what, int extra) { stopBgSound(); return false; } //播放背景音乐,传入的paramInt为res/raw/目录下的音频文件的引用 public void playBgSound(int paramInt) { stopBgSound(); try { //利用音频文件创建一个MeidaPlayer MediaPlayer mediaPlayer = MediaPlayer.create(context, paramInt); bgPlayer = mediaPlayer; bgPlayer.setOnCompletionListener(this); //设置是否循环播放 bgPlayer.setLooping(true); //开始播放 bgPlayer.start(); } catch (IllegalStateException e) { e.printStackTrace(); } } //停止播放背景音乐 public void stopBgSound() { if(bgPlayer == null) return; if(bgPlayer.isPlaying()) bgPlayer.stop(); bgPlayer.release(); bgPlayer = null; }}
然后,新建一个Activity,我命名为MyActivity
MyActivity.java
public class MyActivity extends Activity { public static MusicPlayer musicPlayer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); if(musicPlayer == null) { SysSetting.getInstance(getApplicationContext()).load(); musicPlayer = new MusicPlayer(getApplicationContext()); musicPlayer.playBgSound(R.raw.welcome); } }}
在这里已经完成了大部分的工作,最后一步就是,让你所需要跨Activity播放背景音乐而不使用Service的Activity都继承与这个Activity就可以了。
1 楼 wf2030 2010-11-17
还是不太明白,为什么继承这个类就能不适用service跨Activity播放音乐了, 什么原理呢?
2 楼 chen592969029 2010-11-25
因为这个MusicPlayer是static的,只要都继承这个类,那么这个MusicPlayer就会一直存在,自然就可以一直播放了。