Android-暂停/恢复所有活动中的音乐

Android-暂停/恢复所有活动中的音乐,android,service,android-service,android-mediaplayer,Android,Service,Android Service,Android Mediaplayer,我正在使用MainActivity开发一个游戏,它可以打开具有游戏级别的活动。每个级别的活动都继承一个BaseActivity main活动从未完成。所有的关卡都在上面打开 我想在main活动中启动我的音乐,并在应用程序的其余部分继续播放 我想让服务在应用程序进入后台时暂停音乐 我创建了一个MusicService,它通过MediaPlayer播放音乐,就像这样- @Override public void onCreate() { super.onCreate(); playe

我正在使用
MainActivity
开发一个游戏,它可以打开具有游戏级别的活动。每个级别的活动都继承一个
BaseActivity

main活动
从未完成。所有的关卡都在上面打开

我想在
main活动中启动我的音乐
,并在应用程序的其余部分继续播放

我想让
服务在应用程序进入后台时暂停音乐

我创建了一个
MusicService
,它通过
MediaPlayer
播放音乐,就像这样-

@Override
public void onCreate() {
    super.onCreate();
    player = MediaPlayer.create(this, R.raw.song);
    player.setLooping(true);
    player.setVolume(100,100);
    player.start();
}
我不知道在哪里暂停音乐。
服务
是从
main活动
启动的,但我希望即使应用程序在任何级别的活动中暂停,也能暂停它。我可以通过任何
活动
服务
通信吗


我查看了,但我不希望每次我销毁并创建一个级别活动时音乐都停止然后重新启动。

使用
广播接收器
并在您的服务中注册它

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
        registerReceiver(new Player(), new IntentFilter(App.Communication.Player));

    return START_STICKY;
}

private class Player extends BroadcastReceiver {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onReceive(Context context, Intent intent) {

            Bundle extras = intent.getExtras();

            int action = extras.getInt(App.Communication.IntentAction);
            if(action == App.Communication.ActionStart){

                isPlaying = true;

                String url = extras.getString(App.Communication.URL);
             //Start player from url
            }
            else if(action == App.Communication.ActionPlay ){
                urlPlayer.start();
            }
            else if(action == App.Communication.ActionPause ){
                //Pause Player
            }
            else if(action == App.Communication.ActionStop ){
                //Stop player
            }
            else if(action == App.Communication.ActionSeekForward ){
                //Seek Forward
            }
            else if(action == App.Communication.ActionSeekBack ){
                //Seek Back}

        }
    }
创建一个简单的应用程序类来保存一些静态值

public class App  {

    public class Communication{
        public static final String Player = "Player";
        public static final int ActionStart = 0;
        public static final int ActionPlay = 1;
        public static final int ActionPause = 2;
        public static final int ActionStop = 3;
        public static final int ActionSeekForward = 4;
        public static final int ActionSeekBack = 5;
        public static final int ActionPlayRadio = 6;


    }
}
最后,在任何
活动中
只需调用
广播
。比如玩

    Intent intent = new Intent(App.Communication.Player);
    Bundle mBundle = new Bundle();
    mBundle.putInt(App.Communication.IntentAction,App.Communication.ActionPause);

    intent.putExtras(mBundle);
    mContext.sendBroadcast(intent);
只需使用EventBus

梯度依赖-

implementation 'org.greenrobot:eventbus:3.1.1'
在您的主要活动onCreate中

EventBus.getDefault().register(this);
在你的主要活动中

EventBus.getDefault().unregister(this);
在您的主要活动中,编写如下方法。当您从任何活动发布事件时,此方法将始终调用

@Subscribe(threadMode = ThreadMode.MAIN)
public void onPauseEvent(event: PauseEvent) {

}
最后一步从任何活动或非活动类发布您的事件

EventBus.getDefault().post(new PauseEvent("delete"))

例如,您可以创建通知