【问题标题】:pause main background music on different activity Android在不同的活动Android上暂停主要背景音乐
【发布时间】:2013-06-22 15:42:56
【问题描述】:

所以我正在开发一款安卓游戏。我的主要活动或介绍活动有游戏的背景音乐。总体而言,它是整个游戏的主要背景音乐。所以我让音乐继续播放:

 private void startBgSound() {
    // TODO Auto-generated method stub
    //int soundFile = R.raw.backgroundmusic;
    //AssetFileDescriptor afd = getResources().openRawResourceFd(soundFile);

    bgsound = new MediaPlayer();
    bgsound.reset();
    bgsound = MediaPlayer.create(this, R.raw.backgroundmusic);

    bgsound.setLooping(true);
    bgsound.setVolume(100, 100);
    bgsound.start();
 } 

通过将循环设置为真。当用户应该点击播放按钮(仍然在主活动上)时,下一个活动位于主活动之上。但是在我的第二个活动中,我放了一个暂停按钮,所以当用户点击它时,背景音乐也应该暂停。

您对如何做到这一点有任何聪明的想法吗?我被这个问题困住了。因此,如果您能提供帮助,我将不胜感激。谢谢。

【问题讨论】:

    标签: android android-activity media-player


    【解决方案1】:

    在我的游戏中,我使用静态类处理音乐。只需在开始播放音乐时为其提供上下文,即可在代码中的任何位置停止音乐。

    请确保在用户离开或打开游戏时重置类,因为静态类可能会继续存在,即使游戏已关闭。

    这是一个例子:

    import android.content.Context;
    import android.media.MediaPlayer;
    
    public class SoundHandler {
        private static MediaPlayer backgroundMusic;
        private static Context context;
    
        private static boolean isMuted = false;
    
        public static void setContext(Context cont){
            context = cont;
        }
    
        public static void playMusic(int resource){
            if(backgroundMusic != null) backgroundMusic.reset();
    
            try{
                backgroundMusic = MediaPlayer.create(context, resource);
    
                backgroundMusic.setLooping(true);
                backgroundMusic.setVolume(100, 100);
    
                if(!isMuted){
                    backgroundMusic.start();
                }
            } catch (NullPointerException e){
                //Creating MediaPlayer failed. This happens randomly without any clear reasons.
                e.printStackTrace();
            }
        }
    
        public static void setMuted(boolean muted){
            if(backgroundMusic != null){
                if(muted){
                    if(backgroundMusic.isPlaying()){
                        backgroundMusic.stop();
                        isMuted = true;
                    }
                } else {
                    if(!backgroundMusic.isPlaying()){
                        backgroundMusic.start();
                        isMuted = false;
                    }
                }
            }
        }
    
        public static void quit(){
            if(backgroundMusic != null){
                backgroundMusic.release();
            }
        }
    }
    

    记得在 onCreate() 中设置上下文并在 onDestroy() 中运行 quit() 函数。

    【讨论】:

    • 您好,谢谢,您能给我一个 sn-p 代码让我开始吗?谢谢
    • 我很快就会在我的答案中添加一个:)
    • 已添加。这是我自己的类的一个经过严格修改的版本,我还没有测试它是否有错误,但你至少应该从中得到这个想法。
    • 您好,非常基本的问题,您如何设置上下文?对不起,我是android的新手
    • 在使用此类播放任何歌曲之前,只需将 SoundHandler.setContext(this) 放入 onCreate() 即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多