码迷,mamicode.com
首页 > 移动开发 > 详细

android中添加背景音乐

时间:2015-07-04 11:09:29      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

方法一:这是使用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了。

android中添加背景音乐

标签:

原文地址:http://www.cnblogs.com/sh791165672/p/4620271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!