android相册如何加背景音乐,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 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节点下添加:

android:name=".MainActivity"

android:label="@string/app_name" >

            然后,再在项目中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了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值