奥运会和世界杯

Android中添加背景音乐的两种方法

前些天在尝试自己写一个Android小游戏——flybird

基本功能实现了,就想添加声音,然后上网查了查,大多是一样,可是用到我这,有些却不可以用,所以我还用了两种方法。

下面谈谈这两种方法。

方法一:这是使用Java中的多线程,另外new出一个类,用类来启动音乐。

这个方法,就像当初写java的小游戏一样,不过是在电脑上运行的,可以控制每一个动作,比如你的触碰动作,但是,在我这个游戏中,我需要的不是一点的音乐,虽 然后期会用到,而是一开始就有的。

不过,用这个方法,没用service,就是开起来的时候,会很卡,而且会闪退。

[java]

view plain

copy

package com.example.flybird_anla; import java.util.HashMap; import java.util.Map; import java.util.Random; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.SoundPool; public class SoundPlayer { private static MediaPlayer music; private static SoundPool soundPool; private static boolean musicSt = true; //音乐开关 private static boolean soundSt = true; //音效开关 private static Context context; private static final int[] musicId = {R.raw.paopao}; private static Map soundMap; //音效资源id与加载过后的音源id的映射关系表 public static void init(Context c) { context = c; initMusic(); initSound(); } //初始化音效播放器 private static void initSound() { soundPool = new SoundPool(10,AudioManager.STREAM_MUSIC,100); soundMap = new HashMap(); soundMap.put(R.raw.paopao, soundPool.load(context, R.raw.paopao, 1)); soundMap.put(R.raw.boung, soundPool.load(context, R.raw.boung, 1)); } //初始化音乐播放器 private static void initMusic() { int r = new Random().nextInt(musicId.length); music = MediaPlayer.create(context,musicId[r]); music.setLooping(true); } public static void playSound(int resId) { if(soundSt == false) return; Integer soundId = soundMap.get(resId); if(soundId != null) soundPool.play(soundId, 1, 1, 1, 0, 1); } /** * 暂停音乐 */ public static void pauseMusic() { if(music.isPlaying()) music.pause(); } /** * 播放音乐 */ public static void startMusic() { if(musicSt) music.start(); } /** * 切换一首音乐并播放 */ public static void changeAndPlayMusic() { if(music != null) music.release(); initMusic(); startMusic(); } /** * 获得音乐开关状态 * @return */ public static boolean isMusicSt() { return musicSt; } /** * 设置音乐开关 * @param musicSt */ public static void setMusicSt(boolean musicSt) { SoundPlayer.musicSt = musicSt; if(musicSt) music.start(); else music.stop(); } /** * 获得音效开关状态 * @return */ public static boolean isSoundSt() { return soundSt; } /** * 设置音效开关 * @param soundSt */ public static void setSoundSt(boolean soundSt) { SoundPlayer.soundSt = soundSt; } /** * 发出‘邦’的声音 */ public static void boom() { playSound(R.raw.boung); } }

然后,在需要的地方new出类,在调用方法。

方法二:

这种方法是利用android中的service来开启,也就是进去的时候就播放出,退出就停止。

首先,在AndroidManifest中的application节点下添加:

[java]

view plain

copy

然后,再在项目中new出一个类,MusicServer:

[java]

view plain

copy

package com.example.flybird_anla; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; public class MusicServer extends Service { private MediaPlayer mediaPlayer; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); if (mediaPlayer == null) { // R.raw.mmp是资源文件,MP3格式的 mediaPlayer = MediaPlayer.create(this, R.raw.paopao); mediaPlayer.setLooping(true); mediaPlayer.start(); } } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); mediaPlayer.stop(); } }

最后,在在activity中,写两个函数:

[java]

view plain

copy

protected void onCreate(Bundle savedInstanceState) { Intent intent = new Intent(MainActivity.this,MusicServer.class); super.onCreate(savedInstanceState); startService(intent); manu(); } protected void onStop(){ Intent intent = new Intent(MainActivity.this,MusicServer.class); stopService(intent); super.onStop(); }

然后,就ok了。

Copyright © 2088 世界杯预选赛南美_决赛世界杯 - scbfjc.com All Rights Reserved.
友情链接