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

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

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

        下面谈谈这两种方法。

        方法一:这是使用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, 11101);  
  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了。
  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值