安卓编程添加背景音乐代码和方法

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);

还有 小编卖萌了

参考技术A package com.servicedemo1;

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

本回答被提问者采纳
参考技术B 那播放下一首音乐怎么添加 参考技术C 按照如下示例完成添加背景音乐:
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();
        }
play

第二种、
在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();
    }
play

res/raw目录下的资源,和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。

实现音乐文件的重复播放:

  //音乐重复播放
        mpMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  
            
            @Override 
            public void onCompletion(MediaPlayer arg0) {  
                mpMediaPlayer.start();  
                mpMediaPlayer.setLooping(true);             
            }  
        }); 
View Code

 

以上是关于安卓编程添加背景音乐代码和方法的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局以编程方式添加背景图像视图

android编程如何把现有的背景图片设置成透明的

安卓中遮罩图片的处理

2020/2/1学习总结

以编程方式调用 ibaction 方法不会改变按钮的背景?

java计算机毕业设计基于安卓Android的音乐论坛APP uniapp 小程序