前些天在尝试自己写一个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了。

android相册如何加背景音乐,Android中添加背景音乐的两种方法相关推荐

  1. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  2. mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  3. 怎样在python的turtle中输入文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  4. 怎么在python中添加文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  5. mysql 中添加索引的三种方法(一)

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  6. html 如何给图片打标签,图文详解HTML页面中添加图片的三种方法

    在页面布局时,经常需要在页面中插入图片,那你知道如何在HTML中添加图片吗?这篇文章就给大家介绍HTML页面中插入图片的三种方法,感兴趣的朋友可以参考一下,希望对你有所帮助. 方法一.用HTML中的i ...

  7. python文字教程-Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  8. python怎么在图片上写字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  9. DLL中资源切换的两种方法

    DLL中资源切换的两种方法 方法1 AFX_MANAGE_STATE(AfxGetAppModuleState());                // MFC扩展dll 或 AFX_MANAGE_ ...

  10. python如何在图片上添加文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

最新文章

  1. DeepMind集成AI智能体架构「MERLIN」:基于目标导向智能体中的无监督预测记忆
  2. 01-Java基础语法
  3. mysql_常用命令
  4. P5217 贫穷 平衡树
  5. python interactive window_如果PySide应用程序是从IPython interactive cons运行的,上下文菜单就会消失...
  6. 前后端分离 获取用户ip_前后端分离应用——用户信息传递
  7. 获取浏览器选中文本并操作
  8. 白话文:几个例子马上看懂typescript基础类型
  9. revi插件使用方法| 如何在Revit中修改CAD图纸
  10. abaqus14安装_Abaqus安装方法
  11. 图论与代数结构 最短路问题
  12. RHEL7修改root密码
  13. 什么是DNS?为什么选择UDP?详细的DNS解析过程?
  14. android动态mac地址,Android 版本兼容 — Android 6.0 和 7.0后获取Mac地址
  15. JIRA部署破解和confluence整合
  16. 基于PHP的旅游管理系统
  17. H5页面新增二维码、条形码扫描识别功能
  18. docker容器里无法使用vi命令
  19. 图形性能测试软件,跨平台图形性能基准测试软件3DMark Wild Life发布
  20. 如何实现企业全链路协同,实现企业业绩增长

热门文章

  1. jmeter使用之文件读取
  2. bat批处理修改文件夹下文件名字
  3. 共享服务器哪个系统号,什么是服务器internet应用服务器之一,他可以使用户在不同·操作系统之间进行文件共享...
  4. React入门(2)--React的虚拟dom和diff算法
  5. 一、T100整体系统管理之T100系统架构
  6. python编程第-学习Python编程第002天
  7. docker启动mysql报错
  8. java毕业设计高校学生管理系统mybatis+源码+调试部署+系统+数据库+lw
  9. java- - Object所有类的超类
  10. 机器学习——线性回归实践