android中添加背景音乐
方法一:这是使用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中添加自己的模块 【转】
本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...
- 如何在Android中添加系统服务
一,在frameworks/base/core/java/android/content/Context.java中添加 public static final String RADIO_SERVIC ...
- android中添加只有border-left的样式
如何在android中的边框添加只有左边边框有颜色的样式呢 1. 相应的drawable文件 <?xml version="1.0" encoding="utf-8 ...
- Android中添加监听回调接口的方法
在Android中,我们经常会添加一些监听回调的接口供别的类来回调,比如自定义一个PopupWindow,需要让new这个PopupWindow的Activity来监听PopupWindow中的一些组 ...
- [工作积累] android 中添加libssl和libcurl
1. libssl https://github.com/guardianproject/openssl-android 然后执行ndk-build 2.libcurl 源代码组织结构, 下面的mak ...
- HTML中添加背景音乐
<audio controls="controls" height="100" width="100"> <source ...
- html 中添加背景音乐
Embed (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版的IE 都支持.u ...
- 关于在Android中添加事件监听器的方法
一.匿名内部类 1.先找到那个控件(初始化) private Button bt1; //onCreate方法外 bt1 = (Button)findViewById(R.id.button1); ...
- Android按键添加和处理的方案
Android按键添加和处理的方案 版本号 说明 作者 日期 1.0 Android按键添加和处理的方案 Sky Wang 2013/06/18 需求:Android机器上有个W ...
随机推荐
- OpenLayers控制瓦片的绽放级别
先说说这个功能可能使用到的地方,当我们下载的网上瓦片或者矢量数据的第一级或开始几级效果不是很好时,我们就就想让用户看到这些级别的瓦片.实现这个功能比较简单,主要就是修改Openlayers.map的i ...
- leveldb 学习。
1)大概浏览了leveldb文档的介绍.本想逐步看代码,想想还是自己先实现一个看看如何改进. 2)完成了一个非常丑陋的初版,但是还是比初初版有进步. 3)key value的数据库,不允许有key重复 ...
- 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务
一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...
- java时间类型的转换/获取当前时间/将时间转换成String/将String转换成时间
对于我的脑子,我已经服气了...写了N遍的东西,就是记不住...既然记不住那就记下来... 利用java获取当前的时间(String类型,年-月-日 时:分:秒) //我要获取当前的日期 Date d ...
- 关于C语言结构体,指针,声明的详细讲解。——Arvin
关于结构体的详细分析 只定义结构体 struct Student { int age; char* name; char sex;//结构体成员 };//(不要忘记分号) Student是结构体的名字 ...
- 一个View的子类实例化
View子类的实例化.如果是在activity中通过findViewById的形式实例化,那么它的具体的构造函数是什么呢,看看父类View的源码就容易发现是 通过这个构造函数实例化的 public V ...
- 虚拟机EAL: Error reading from file descriptor
这个是虚拟机安装固有的BUG,代码差异如下: diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linux ...
- MySQL问题记录--python插入中文至MySQL提示SQLErroor:1366错误
一.在爬虫脚本做以下操作仍提示错误:SQL Error: 1366: Incorrect string value: "\xd0\xc2\xce\xc5-" for column ...
- JDBC/PreparedStatement
JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力 JDBC AP 是Sun公司提供的I 内容:供程序员调用的接口,集成在Java.sql和javax.sql包中, 如 ...
- js 同for一样效果 (延迟)每秒循环一次 追加
<script type="text/javascript"> var j = 1; var timeID = null; function ...