方法一:这是使用java中的多线程,另外new出一个类,用类来启动音乐。
这个方法,就像当初写java的小游戏一样,不过是在电脑上运行的,可以控制每一个动作,比如你的触碰动作,但是,在我这个游戏中,我需要的不是一点的音乐,虽 然后期会用到,而是一开始就有的。
不过,用这个方法,没用service,就是开起来的时候,会很卡,而且会闪退。
1 package com.example.flybird_anla; 2 3 4 import java.util.HashMap; 5 import java.util.Map; 6 import java.util.Random; 7 8 9 10 import android.content.Context; 11 import android.media.AudioManager; 12 import android.media.MediaPlayer; 13 import android.media.SoundPool; 14 15 16 public class SoundPlayer { 17 18 private static MediaPlayer music; 19 private static SoundPool soundPool; 20 21 private static boolean musicSt = true; //音乐开关 22 private static boolean soundSt = true; //音效开关 23 private static Context context; 24 25 private static final int[] musicId = {R.raw.paopao}; 26 private static Map<Integer,Integer> soundMap; //音效资源id与加载过后的音源id的映射关系表 27 28 public static void init(Context c) 29 { 30 context = c; 31 32 initMusic(); 33 34 initSound(); 35 } 36 37 //初始化音效播放器 38 private static void initSound() 39 { 40 soundPool = new SoundPool(10,AudioManager.STREAM_MUSIC,100); 41 42 soundMap = new HashMap<Integer,Integer>(); 43 soundMap.put(R.raw.paopao, soundPool.load(context, R.raw.paopao, 1)); 44 soundMap.put(R.raw.boung, soundPool.load(context, R.raw.boung, 1)); 45 } 46 47 //初始化音乐播放器 48 private static void initMusic() 49 { 50 int r = new Random().nextInt(musicId.length); 51 music = MediaPlayer.create(context,musicId[r]); 52 music.setLooping(true); 53 } 54 55 56 public static void playSound(int resId) 57 { 58 if(soundSt == false) 59 return; 60 61 Integer soundId = soundMap.get(resId); 62 if(soundId != null) 63 soundPool.play(soundId, 1, 1, 1, 0, 1); 64 } 65 66 /** 67 * 暂停音乐 68 */ 69 public static void pauseMusic() 70 { 71 if(music.isPlaying()) 72 music.pause(); 73 } 74 75 /** 76 * 播放音乐 77 */ 78 public static void startMusic() 79 { 80 if(musicSt) 81 music.start(); 82 } 83 84 /** 85 * 切换一首音乐并播放 86 */ 87 public static void changeAndPlayMusic() 88 { 89 if(music != null) 90 music.release(); 91 initMusic(); 92 startMusic(); 93 } 94 95 /** 96 * 获得音乐开关状态 97 * @return 98 */ 99 public static boolean isMusicSt() { 100 return musicSt; 101 } 102 103 /** 104 * 设置音乐开关 105 * @param musicSt 106 */ 107 public static void setMusicSt(boolean musicSt) { 108 SoundPlayer.musicSt = musicSt; 109 if(musicSt) 110 music.start(); 111 else 112 music.stop(); 113 } 114 115 /** 116 * 获得音效开关状态 117 * @return 118 */ 119 public static boolean isSoundSt() { 120 return soundSt; 121 } 122 123 /** 124 * 设置音效开关 125 * @param soundSt 126 */ 127 public static void setSoundSt(boolean soundSt) { 128 SoundPlayer.soundSt = soundSt; 129 } 130 131 /** 132 * 发出‘邦’的声音 133 */ 134 public static void boom() 135 { 136 playSound(R.raw.boung); 137 } 138 }
然后,在需要的地方new出类,在调用方法。
方法二:
这种方法是利用Android中的service来开启,也就是进去的时候就播放出,退出就停止。
首先,在AndroidManifest中的application节点下添加:
1 <activity 2 android:name=".MainActivity" 3 android:label="@string/app_name" > 4 <intent-filter> 5 <action android:name="android.intent.action.MAIN" /> 6 7 <category android:name="android.intent.category.LAUNCHER" /> 8 </intent-filter> 9 </activity>
然后,再在项目中new出一个类,MusicServer:
1 package com.example.flybird_anla; 2 3 import android.app.Service; 4 import android.content.Intent; 5 import android.media.MediaPlayer; 6 import android.os.IBinder; 7 8 public class MusicServer extends Service { 9 10 private MediaPlayer mediaPlayer; 11 12 @Override 13 public IBinder onBind(Intent intent) { 14 // TODO Auto-generated method stub 15 return null; 16 } 17 18 @Override 19 public void onStart(Intent intent, int startId) { 20 super.onStart(intent, startId); 21 22 if (mediaPlayer == null) { 23 24 // R.raw.mmp是资源文件,MP3格式的 25 mediaPlayer = MediaPlayer.create(this, R.raw.paopao); 26 mediaPlayer.setLooping(true); 27 mediaPlayer.start(); 28 29 } 30 } 31 32 @Override 33 public void onDestroy() { 34 // TODO Auto-generated method stub 35 super.onDestroy(); 36 mediaPlayer.stop(); 37 } 38 }
最后,在在activity中,写两个函数:
1 protected void onCreate(Bundle savedInstanceState) { 2 Intent intent = new Intent(MainActivity.this,MusicServer.class); 3 super.onCreate(savedInstanceState); 4 startService(intent); 5 manu(); 6 } 7 8 protected void onStop(){ 9 Intent intent = new Intent(MainActivity.this,MusicServer.class); 10 stopService(intent); 11 super.onStop(); 12 13 }
然后,就ok了。
时间: 2024-11-03 20:12:46