安卓 - 暂停/恢复所有活动的音乐



我正在开发一个带有MainActivity的游戏,该游戏打开了游戏关卡的活动。每个关卡活动都继承一个BaseActivity

MainActivity永远不会结束。所有关卡都在它上面打开。

我想在MainActivity开始我的音乐,并在应用程序的其余部分保持播放。

问题是我希望Service在应用程序进入后台时暂停音乐。

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

@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.song);
player.setLooping(true);
player.setVolume(100,100);
player.start();
}

我对在哪里暂停音乐感到困惑。Service是从MainActivity开始的,但我希望即使应用程序在任何关卡活动中暂停,我也希望能够暂停它。我可以通过任何ActivityService沟通吗?

我看了这个问题,但我不希望我的音乐停止,然后在每次我破坏和创建关卡活动时重新启动。

只需使用事件总线

格拉德尔依赖 -

implementation 'org.greenrobot:eventbus:3.1.1'

在您的主要活动中创建

EventBus.getDefault().register(this);

在你的主要活动中摧毁

EventBus.getDefault().unregister(this);

在您的主要活动中,编写方法如下。当您从任何活动发布事件时,此方法将始终调用

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

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

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

使用BroadcastReceiver并在服务中注册它

@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}
}
}

创建一个简单的 App 类来保存一些静态值

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;

}
}

最后,在任何Activity简单的调用中BroadCast.例如玩

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

相关内容

  • 没有找到相关文章

最新更新