安卓编程添加背景音乐代码和方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓编程添加背景音乐代码和方法相关的知识,希望对你有一定的参考价值。
MediaPlayer
网上有人封装了一个 直接拿来用就可以了
package com.llkan.setup;import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.llkan.R;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
/**
* 声音控制类
* @author wyf
*
*/
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.bg,R.raw.bg1,R.raw.bg2,R.raw.bg3;
private static Map<Integer,Integer> soundMap; //音效资源id与加载过后的音源id的映射关系表
/**
* 初始化方法
* @param c
*/
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.itemboom, soundPool.load(context, R.raw.itemboom, 1));
soundMap.put(R.raw.sel, soundPool.load(context, R.raw.sel, 1));
//初始化音乐播放器
private static void initMusic()
int r = new Random().nextInt(musicId.length);
music = MediaPlayer.create(context,musicId[r]);
music.setLooping(true);
/**
* 播放音效
* @param resId 音效资源id
*/
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.itemboom);
还有 小编卖萌了
import java.io.IOException;
import com.servicedemo.R;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class MusicService extends Service
private static final String TAG = "MyService";
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent arg0)
return null;
@Override
public void onCreate()
Log.v(TAG, "onCreate");
Toast.makeText(this, "show media player", Toast.LENGTH_SHORT).show();
if (mediaPlayer == null)
mediaPlayer = MediaPlayer.create(this, R.raw.ywgsbd);
mediaPlayer.setLooping(false);
@Override
public void onDestroy()
Log.v(TAG, "onDestroy");
Toast.makeText(this, "stop media player", Toast.LENGTH_SHORT);
if (mediaPlayer != null)
mediaPlayer.stop();
mediaPlayer.release();
@Override
public void onStart(Intent intent, int startId)
Log.v(TAG, "onStart");
if (intent != null)
Bundle bundle = intent.getExtras();
if (bundle != null)
int op = bundle.getInt("op");
switch (op)
case 1:
play();
break;
case 2:
stop();
break;
case 3:
pause();
break;
public void play()
if (!mediaPlayer.isPlaying())
mediaPlayer.start();
public void pause()
if (mediaPlayer != null && mediaPlayer.isPlaying())
mediaPlayer.pause();
public void stop()
if (mediaPlayer != null)
mediaPlayer.stop();
try
mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数
catch (IOException ex)
ex.printStackTrace();
追问
可以详细点吗,或者加上解释,谢了
追答public class PlayMusicService extends Activity implements OnClickListener private Intent intent;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.music_service);
playBtn.setOnClickListener(this);
stopBtn.setOnClickListener(this);
pauseBtn.setOnClickListener(this);
exitBtn.setOnClickListener(this);
closeBtn.setOnClickListener(this);
@Override
public void onClick(View v)
int op = -1;
intent = new Intent("com.homer.service.musicService");
switch (v.getId())
case R.id.play: // play music
op = 1;
break;
case R.id.stop: // stop music
op = 2;
break;
case R.id.pause: // pause music
op = 3;
break;
case R.id.close: // close activity
this.finish();
break;
case R.id.exit: // stopService
op = 4;
stopService(intent);
this.finish();
break;
Bundle bundle = new Bundle();
bundle.putInt("op", op);
intent.putExtras(bundle);
startService(intent); // startService
1、在AndroidManifest.xml文件中的<application>标签内加入下边语句。
<service android:name=".MusicServer">
<intent-filter>
<action android:name="com.angel.Android.MUSIC"/>
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
2、新建MusicServer.java类。
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.abc);
mediaPlayer.setLooping(true);
mediaPlayer.start();
@Override
public void onDestroy()
// TODO Auto-generated method stub
super.onDestroy();
mediaPlayer.stop();
3、将歌曲放入raw文件夹下,名称为abc。
4、在Activity中加入代码。
private Intent intent = new Intent("com.angel.Android.MUSIC");
onCreate方法中加入startService(intent);
即完成添加背景音乐。
安卓,播放音乐资源文件
这里介绍两种播放资源文件的方法:
第一种、
assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。这里把要添加的音乐文件加入进去
添加play()方法。
protected void play(){ AssetManager am = getAssets(); try { mpMediaPlayer.setDataSource(am.openFd("first.mp3").getFileDescriptor()); mpMediaPlayer.prepare(); mpMediaPlayer.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
第二种、
在res文件夹下添加raw文件夹,在raw文件夹下添加音乐文件,继续添加音乐文件,后添加paly方法
protected void play(){ mpMediaPlayer=MediaPlayer.create(this, R.raw.first); try { mpMediaPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mpMediaPlayer.start(); }
res/raw目录下的资源,和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。
实现音乐文件的重复播放:
//音乐重复播放 mpMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { mpMediaPlayer.start(); mpMediaPlayer.setLooping(true); } });
以上是关于安卓编程添加背景音乐代码和方法的主要内容,如果未能解决你的问题,请参考以下文章