当前位置: 代码迷 >> Android >> Android中不要Service跨Avtivity仍然可以播放音乐的一个简单方法
  详细解决方案

Android中不要Service跨Avtivity仍然可以播放音乐的一个简单方法

热度:29   发布时间:2016-05-01 13:58:41.0
Android中不用Service跨Avtivity仍然可以播放音乐的一个简单方法
首先创建一个专门用来播放音乐文件(在这里只播放已经导入到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就会一直存在,自然就可以一直播放了。
  相关解决方案