方法一:这是使用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. CentOS 6.5 yum安装配置lnmp服务器(Nginx+PHP+MySQL)

    以下全部转载于  http://blog.csdn.net/lane_l/article/details/20235909 本人于今晚按照该文章使用centos 6.7 64bit安装成功,做个备份, ...

  2. TCP/IP 三次握手-四次挥手

    TCP的建立需要三次握手,断开需要四次挥手. 首先三次握手: 首先,客户机向服务器发送请求报文,服务器回复ACK,并分配资源,而客户端接受到ACK后回复确认报文,并分配资源,此时三次握手完成. 四次挥 ...

  3. 转载ali面

    引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字. 写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善. 之前LZ写过一篇<回答阿里社招面试如何准备,顺便谈谈 ...

  4. PBOC~PPT-补充A(转)

    qPBOC简介PBOC 3.0非接交易包括:非接PBOC和qPBOC.非接PBOC流程与接触式无异,仅命令交互方式改变,故不再赘述. qPBOC - 快速借记/贷记,交易特点:目录选择PPSE使用“2 ...

  5. git clone --early EOF

    出现这个问题可能需要重新检查以下方面: 1. Android studio Git 的安装地址:  ..../Git/cmd/git.exe 记得在环境变量 --Path 中进行配置: ,..../G ...

  6. log4j.properties

    ### set log levels ### log4j.rootLogger = INFO, stdout , D , E ### \u8F93\u51FA\u5230\u63A7\u5236\u5 ...

  7. [mobile开发碎碎念]手机页面上显示PDF文件

    demo:http://mozilla.github.io/pdf.js/web/viewer.html 项目地址:https://github.com/mozilla/pdf.js <scri ...

  8. Python之路 day2 文件基础操作

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa ''' #f,文件句柄;模式 a : append 追加文件内容 f = open( ...

  9. 【oracle】oracle学习笔记2--scoot账户的激活与解锁

    1.用sysz账户as sysddba登录,并执行scott.sql文件.我的文件目录是C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin ...

  10. iframe详细的使用

    谷歌火狐和ie是有区别的谷歌需要服务器,为了更安全 获取内容的时候, 正常渲染没问题获取内容var oIframe = document.getElementById('iframe'); oIfra ...