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

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

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

        下面谈谈这两种方法。

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

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

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

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<Integer,Integer> 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<Integer,Integer>();
       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节点下添加:

<activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
            然后,再在项目中new出一个类,MusicServer:

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中,写两个函数:
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了。



  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值