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

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

下面谈谈这两种方法。

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

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

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

[java] view plaincopy
  1. package com.example.flybird_anla;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Random;
  5. import android.content.Context;
  6. import android.media.AudioManager;
  7. import android.media.MediaPlayer;
  8. import android.media.SoundPool;
  9. public class SoundPlayer {
  10. private static MediaPlayer music;
  11. private static SoundPool soundPool;
  12. private static boolean musicSt = true; //音乐开关
  13. private static boolean soundSt = true; //音效开关
  14. private static Context context;
  15. private static final int[] musicId = {R.raw.paopao};
  16. private static Map<Integer,Integer> soundMap; //音效资源id与加载过后的音源id的映射关系表
  17. public static void init(Context c)
  18. {
  19. context = c;
  20. initMusic();
  21. initSound();
  22. }
  23. //初始化音效播放器
  24. private static void initSound()
  25. {
  26. soundPool = new SoundPool(10,AudioManager.STREAM_MUSIC,100);
  27. soundMap = new HashMap<Integer,Integer>();
  28. soundMap.put(R.raw.paopao, soundPool.load(context, R.raw.paopao, 1));
  29. soundMap.put(R.raw.boung, soundPool.load(context, R.raw.boung, 1));
  30. }
  31. //初始化音乐播放器
  32. private static void initMusic()
  33. {
  34. int r = new Random().nextInt(musicId.length);
  35. music = MediaPlayer.create(context,musicId[r]);
  36. music.setLooping(true);
  37. }
  38. public static void playSound(int resId)
  39. {
  40. if(soundSt == false)
  41. return;
  42. Integer soundId = soundMap.get(resId);
  43. if(soundId != null)
  44. soundPool.play(soundId, 1, 1, 1, 0, 1);
  45. }
  46. /**
  47. * 暂停音乐
  48. */
  49. public static void pauseMusic()
  50. {
  51. if(music.isPlaying())
  52. music.pause();
  53. }
  54. /**
  55. * 播放音乐
  56. */
  57. public static void startMusic()
  58. {
  59. if(musicSt)
  60. music.start();
  61. }
  62. /**
  63. * 切换一首音乐并播放
  64. */
  65. public static void changeAndPlayMusic()
  66. {
  67. if(music != null)
  68. music.release();
  69. initMusic();
  70. startMusic();
  71. }
  72. /**
  73. * 获得音乐开关状态
  74. * @return
  75. */
  76. public static boolean isMusicSt() {
  77. return musicSt;
  78. }
  79. /**
  80. * 设置音乐开关
  81. * @param musicSt
  82. */
  83. public static void setMusicSt(boolean musicSt) {
  84. SoundPlayer.musicSt = musicSt;
  85. if(musicSt)
  86. music.start();
  87. else
  88. music.stop();
  89. }
  90. /**
  91. * 获得音效开关状态
  92. * @return
  93. */
  94. public static boolean isSoundSt() {
  95. return soundSt;
  96. }
  97. /**
  98. * 设置音效开关
  99. * @param soundSt
  100. */
  101. public static void setSoundSt(boolean soundSt) {
  102. SoundPlayer.soundSt = soundSt;
  103. }
  104. /**
  105. * 发出‘邦’的声音
  106. */
  107. public static void boom()
  108. {
  109. playSound(R.raw.boung);
  110. }
  111. }

然后,在需要的地方new出类,在调用方法。

方法二:

这种方法是利用android中的service来开启,也就是进去的时候就播放出,退出就停止。

首先,在AndroidManifest中的application节点下添加:

[java] view plaincopy
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

然后,再在项目中new出一个类,MusicServer:

[java] view plaincopy
  1. package com.example.flybird_anla;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.media.MediaPlayer;
  5. import android.os.IBinder;
  6. public class MusicServer extends Service {
  7. private MediaPlayer mediaPlayer;
  8. @Override
  9. public IBinder onBind(Intent intent) {
  10. // TODO Auto-generated method stub
  11. return null;
  12. }
  13. @Override
  14. public void onStart(Intent intent, int startId) {
  15. super.onStart(intent, startId);
  16. if (mediaPlayer == null) {
  17. // R.raw.mmp是资源文件,MP3格式的
  18. mediaPlayer = MediaPlayer.create(this, R.raw.paopao);
  19. mediaPlayer.setLooping(true);
  20. mediaPlayer.start();
  21. }
  22. }
  23. @Override
  24. public void onDestroy() {
  25. // TODO Auto-generated method stub
  26. super.onDestroy();
  27. mediaPlayer.stop();
  28. }
  29. }

最后,在在activity中,写两个函数:

[java] view plaincopy
  1. protected void onCreate(Bundle savedInstanceState) {
  2. Intent intent = new Intent(MainActivity.this,MusicServer.class);
  3. super.onCreate(savedInstanceState);
  4. startService(intent);
  5. manu();
  6. }
  7. protected void onStop(){
  8. Intent intent = new Intent(MainActivity.this,MusicServer.class);
  9. stopService(intent);
  10. super.onStop();
  11. }

然后,就ok了。

Android中添加背景音乐的两种方法相关推荐

  1. android相册如何加背景音乐,Android中添加背景音乐的两种方法

    前些天在尝试自己写一个Android小游戏--flybird 基本功能实现了,就想添加声音,然后上网查了查,大多是一样,可是用到我这,有些却不可以用,所以我还用了两种方法. 下面谈谈这两种方法. 方法 ...

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

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

  3. 在html5中怎么设置背景音乐,HTML5简单实现添加背景音乐的几种方法

    这里推荐两种方法,就是两个标签 或者 常用 +css布局 隐藏播放器 做网站比较实用! html5添加音乐 说明: 1.src毫无疑问写路径. 2.使用hidden="true"表 ...

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

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

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

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

  6. html语言音乐添加路径,HTML5简单实现添加背景音乐的几种方法

    这里推荐两种方法,就是两个标签 或者 常用 +css布局 隐藏播放器 做网站比较实用! html5添加音乐 说明: 1.src毫无疑问写路径. 2.使用hidden="true"表 ...

  7. android 图片叠加xml,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...

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

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

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

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

最新文章

  1. 如何查看ddos 放开的ip
  2. 自定义分页模板(银角大王版)
  3. 橱窗布置(信息学奥赛一本通-T1279)
  4. rabbitmq docker
  5. [转]char数组赋值
  6. android makefile文件批量拷贝文件的方法
  7. 程序员面试金典——7.5平分的直线
  8. 安全运维 - Linux系统维护
  9. python余弦定理求角_余弦定理计算文章相似度
  10. python 英语词典下载_Python 字典(Dictionary)
  11. eclipse代码补全、代码提示及防空格自动补全
  12. 福利,架构师之路定制T恤
  13. java短信验证码功能发送的验证码如何校验_java实现发送短信验证码
  14. 随机生成数猜大小(java实现)
  15. svm之使用SVM(斯坦福machine learning week 7)
  16. C++ Primer阅读笔记--书包程序
  17. Android Studio创建虚拟机选定指定位置
  18. 【转载】8B/10B Encode/Decode详解
  19. SQLServer·面试题
  20. Arduino基础知识复习12.18

热门文章

  1. Oracle Exadata迈入十年将助企业迈向数位转型之路
  2. Qwt(一): 编译 · 安装
  3. 【译】为何我们要写super(props)?
  4. 搭建docker私有仓库
  5. 2013手机App发展趋势预测:遇冷和洗牌
  6. MSSQL-SQL SERVER 分页原理
  7. 用Saltstack的modules和grains实现实时监控平台
  8. 组合模式测试组合模式(Composite Pattern)
  9. 联机日志损坏时的恢复(非正常关闭数据库)
  10. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用37