- 论坛徽章:
- 0
|
再补充一点吧,如果需要给游戏加上背景音乐,其实也是非常容易的事情。因为Android提供了一个 MediaPlayer类可以方便的播放音乐文件。
android.media.MediaPlayer类没有构造函数,一般是用它的静态方法create生成实例,简单地告诉它音乐文件的资源ID即可(支持mp3/wav/midi等)。
首先,我们得建立一个Service,就叫MediaService吧,它的代码如下:
![]()
![]()
public class MediaService extends Service implements MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener,MediaPlayer.OnPreparedListener ...{
![]()
![]()
... ...
![]()
![]()
private MediaPlayer player;
![]()
![]()
@Override
![]()
![]()
protected void onDestroy() ...{
![]()
// TODO Auto-generated method stub
![]()
super.onDestroy();
![]()
![]()
if(player!=null)...{
![]()
player.stop();
![]()
player.release();
![]()
}
![]()
}
![]()
![]()
@Override
![]()
![]()
protected void onStart(int startId, Bundle arguments) ...{
![]()
// TODO Auto-generated method stub
![]()
Log.d("Media","onStart");
![]()
![]()
player=MediaPlayer.create(this.getApplication(),R.raw.tonhua);
![]()
![]()
if(player!=null)...{
![]()
player.setAudioStreamType(AudioSystem.STREAM_MUSIC);
![]()
![]()
player.setOnCompletionListener(this);
![]()
player.setOnPreparedListener(this);
![]()
player.setOnErrorListener(this);
![]()
![]()
player.prepareAsync();
![]()
}
![]()
}
![]()
![]()
@Override
![]()
![]()
public void onCompletion(MediaPlayer arg0) ...{
![]()
// TODO Auto-generated method stub
![]()
Log.d("Media","finished.");
![]()
}
![]()
![]()
@Override
![]()
![]()
public void onPrepared(MediaPlayer arg0) ...{
![]()
// TODO Auto-generated method stub
![]()
Log.d("Media","prepared.");
![]()
player.start();
![]()
}
![]()
![]()
@Override
![]()
![]()
public void onError(MediaPlayer arg0,int what, int extra) ...{
![]()
![]()
Log.d("Media","onError");
![]()
player.stop();
![]()
}
![]()
}
![]()
这个服务主要就是用一个MediaPlayer去播放资源中的tonghua(一首MP3音乐)。次序一般是先create出这个实例,然后 prepare一下(如果是文件直接prepare,如果是流则最好异步parepareAsync),接着就可以start了,同步可以直接 start,异步则必须放到onPrepared中再start。
在MainActivity中启动这个服务即可。
![]()
mediaServiceIntent= new Intent();
![]()
mediaServiceIntent.setClass(this, MediaService.class);
![]()
![]()
this.startService(mediaServiceIntent, new Bundle());
当前,在Activity停止时也别忘了将这个Service停掉,而在Service停止时关掉MediaPlayer。
在模拟器上试了,效果不是太好,声音有点断断续续,不知道是不是我的解码器的问题(Vista系统)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85805/showart_1421772.html |
|