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

android中添加背景音乐的更多相关文章

  1. Android中添加自己的模块 【转】

    本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...

  2. 如何在Android中添加系统服务

    一,在frameworks/base/core/java/android/content/Context.java中添加 public static final String RADIO_SERVIC ...

  3. android中添加只有border-left的样式

    如何在android中的边框添加只有左边边框有颜色的样式呢 1. 相应的drawable文件 <?xml version="1.0" encoding="utf-8 ...

  4. Android中添加监听回调接口的方法

    在Android中,我们经常会添加一些监听回调的接口供别的类来回调,比如自定义一个PopupWindow,需要让new这个PopupWindow的Activity来监听PopupWindow中的一些组 ...

  5. [工作积累] android 中添加libssl和libcurl

    1. libssl https://github.com/guardianproject/openssl-android 然后执行ndk-build 2.libcurl 源代码组织结构, 下面的mak ...

  6. HTML中添加背景音乐

    <audio controls="controls" height="100" width="100"> <source ...

  7. html 中添加背景音乐

    Embed (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版的IE 都支持.u ...

  8. 关于在Android中添加事件监听器的方法

    一.匿名内部类 1.先找到那个控件(初始化) private Button bt1;  //onCreate方法外 bt1 = (Button)findViewById(R.id.button1); ...

  9. Android按键添加和处理的方案

    Android按键添加和处理的方案  版本号 说明 作者 日期  1.0  Android按键添加和处理的方案 Sky Wang  2013/06/18        需求:Android机器上有个W ...

随机推荐

  1. Adobe Photoshop CC (32/64位) 绿色精简版

    32位版下载地址:http://pan.baidu.com/share/link?uk=33907222&shareid=3828486959 64位版下载地址:http://pan.baid ...

  2. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  3. eclipse rcp 打包出适合不同操作系统和操作位数.

    http://blog.csdn.net/luoww1/article/details/8677999 http://blog.csdn.net/soszou/article/details/8053 ...

  4. web.xml listener和event

    Listener接口 Event类 ServletContextListener ServletContextEvent ServletContextAttributeListener Servlet ...

  5. windbg运行

    运行起来会提示windbg is running. BUSY 这个是正常运行的状态,只有发生异常,或者被指定断点,才会中断.

  6. jquery TypeError: $(...).live is not a functio,动态添加class的点击事件处理

    jq版本更新后无live函数的处理.TypeError: $(...).live is not a function jquery live函数语法 jquery版本更新, 发现一个问题: jq自带的 ...

  7. DFA敏感词过滤

    import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.ArrayList; ...

  8. JSON API免费接口

    来自:http://www.bejson.com/knownjson/webInterface/ 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuId ...

  9. SPSS数据分析—主成分分析

    我们在分析问题的时候,为了准确全面的反映问题,常常收集很多变量,这些变量之间往往具有相关性,导致存在大量的重复信息,直接使用的话,不但模型非常复杂,而且所引起的共线性问题会使模型准确度降低. 对此,我 ...

  10. angular-ui-router中的$stateProvider设置

    $stateProvider .state('contacts.list', { url: '', templateUrl: 'contacts.list.html' }) .state('conta ...