我花了大约20个小时,直到现在,我的问题仍然存在。我正在创建一个Android应用程序,有几个活动(主菜单,关于我们,设置)。我按照下面的链接的最佳答案,这是O.K. Music played using asyncTask isn't stopping by using cancel
当我运行我的应用程序时,(我的代码在mainActivity中),音乐开始,当导航到其他Activity时它不会停止。这很好。但是我在我的setting_activity Activity中放置了一个ToggleButton,我希望这个按钮可以启动和停止此音乐。现在我的问题是如何从setting_activity停止和/或再次启动音乐?
在另一解决方案中:我创建了一个类MusicManager,我称之为start和stop。但这也有几个问题:
1.音乐在mainMenu_activity中启动,但只播放了大约15秒,然后停止。
1.我无法停止另一个活动的音乐。此时我在mainMenua_ctivity中播放音乐,如下代码:
MusicManager mm = new MusicManager(this, R.raw.background_sound);
mm.play();
我怎么能停止播放那个呢?3.当我导航到其他活动时,音乐停止了。
public class MusicManager implements OnPreparedListener {
static MediaPlayer mPlayer;
Context context;
private int mySoundId;
public MusicManager(Context ctx, int musicID) {
context = ctx;
mySoundId = musicID;
mPlayer = MediaPlayer.create(context, mySoundId);
mPlayer.setOnPreparedListener(this);
}
public void play() {
mPlayer = MediaPlayer.create(context, mySoundId);
}
public void stop() {
mPlayer.stop();
mPlayer.release();
}
@Override
public void onPrepared(MediaPlayer player) {
player.start();
mPlayer.setLooping(true);
mPlayer.setVolume(25, 25);
}
}
最后,我想在所有活动中播放一段背景音乐,而不需要停止/开始音乐。我该怎么做呢?
7条答案
按热度按时间rbl8hiat1#
你可以把音乐播放器放在一个服务中,这样它就可以独立于Activity,你仍然可以通过Intent来控制播放。
下面是一些关于它的代码示例:https://stackoverflow.com/a/8209975/2804473下面的代码是由Synxmax在StackOverflow上编写的,并在上面的链接中进行了介绍:
mi7gmzs62#
d7v8vwbk3#
unhi4e5o4#
最上面的答案是正确的,但是您必须将服务添加到清单文件中。
nkhmeac65#
Simon上面的答案是正确的。我有类似的问题,我有音乐播放器的片段,我需要点击按钮回到那个UI。你的情况类似,但不是回到UI,你想控制播放。这是我为我的应用程序做的。这负责播放音频列表,包括随机播放和重复功能。这也可以在通知栏中显示媒体控件。
1.使用以下代码创建服务
MusicPlayerService
:1.将服务添加到清单
1.在MainActivity中绑定服务并声明调用服务的方法
doinxwow6#
这是我的解决方案:
1-首先在raw文件夹中添加一个音乐文件(在我的例子中是coffee.mp3)
2-创建一个名为BackgroundSoundService的类来扩展Service:
不要忘记在android manifest.xml的application标签中定义这个服务:
3-对于Activity中的播放按钮,请使用以下代码:
3-对于Activity中的停止按钮,请使用以下代码:
我已经创建了一个简单的Android应用程序,其中两个活动在后台服务中播放音乐,如果应用程序对用户不可见(例如用户按下Home键),应用程序将暂停音乐。
9njqaruj7#
您可以使用
SharedPrefences
保存Boolean
,并在每次更改设置时重新启动应用程序,并检查您在设置中保存的Boolean
。