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<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中添加背景音乐的两种方法相关推荐
- android相册如何加背景音乐,Android中添加背景音乐的两种方法
前些天在尝试自己写一个Android小游戏--flybird 基本功能实现了,就想添加声音,然后上网查了查,大多是一样,可是用到我这,有些却不可以用,所以我还用了两种方法. 下面谈谈这两种方法. 方法 ...
- 怎样在python的turtle中输入文字_Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
- 在html5中怎么设置背景音乐,HTML5简单实现添加背景音乐的几种方法
这里推荐两种方法,就是两个标签 或者 常用 +css布局 隐藏播放器 做网站比较实用! html5添加音乐 说明: 1.src毫无疑问写路径. 2.使用hidden="true"表 ...
- 怎么在python中添加文字_Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
- python文字教程-Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
- html语言音乐添加路径,HTML5简单实现添加背景音乐的几种方法
这里推荐两种方法,就是两个标签 或者 常用 +css布局 隐藏播放器 做网站比较实用! html5添加音乐 说明: 1.src毫无疑问写路径. 2.使用hidden="true"表 ...
- android 图片叠加xml,Android实现图片叠加效果的两种方法
本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...
- mysql添加临时索引_mysql 中添加索引的三种方法
在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...
- python怎么在图片上写字_Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
最新文章
- 如何查看ddos 放开的ip
- 自定义分页模板(银角大王版)
- 橱窗布置(信息学奥赛一本通-T1279)
- rabbitmq docker
- [转]char数组赋值
- android makefile文件批量拷贝文件的方法
- 程序员面试金典——7.5平分的直线
- 安全运维 - Linux系统维护
- python余弦定理求角_余弦定理计算文章相似度
- python 英语词典下载_Python 字典(Dictionary)
- eclipse代码补全、代码提示及防空格自动补全
- 福利,架构师之路定制T恤
- java短信验证码功能发送的验证码如何校验_java实现发送短信验证码
- 随机生成数猜大小(java实现)
- svm之使用SVM(斯坦福machine learning week 7)
- C++ Primer阅读笔记--书包程序
- Android Studio创建虚拟机选定指定位置
- 【转载】8B/10B Encode/Decode详解
- SQLServer·面试题
- Arduino基础知识复习12.18