Android MadiaPlayer活动之间的开始-停止暂停
我写了一个额外的类,如贝娄“控制”不同活动的音乐。当我从活动1切换到活动2时,它应该继续播放。但即使我调用backgroundmusic.start(),它也会停止;在我的第二个活动中:Android MadiaPlayer活动之间的开始-停止暂停,android,media-player,Android,Media Player,我写了一个额外的类,如贝娄“控制”不同活动的音乐。当我从活动1切换到活动2时,它应该继续播放。但即使我调用backgroundmusic.start(),它也会停止;在我的第二个活动中: public class Music { public static MediaPlayer backgroundmusik; public static int pausedSaver; public static void playAudio(Context c, int i
public class Music {
public static MediaPlayer backgroundmusik;
public static int pausedSaver;
public static void playAudio(Context c, int id){
backgroundmusik = MediaPlayer.create(c, id);
backgroundmusik.setLooping(true);
backgroundmusik.start();
}
public static void playFrom() {
if(!backgroundmusik.isPlaying()) {
backgroundmusik.seekTo(pausedSaver);
backgroundmusik.setLooping(true);
backgroundmusik.start();
}
}
public static void playPause()
{
backgroundmusik.pause();
pausedSaver = backgroundmusik.getCurrentPosition();
}
public static void stopAudio(){
if(backgroundmusik.isPlaying()) {
backgroundmusik.stop();
}
}
}
第一项活动:
public class WelcomeActivity extends AppCompatActivity{
Music musicPlayer;
int previous;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_layout);
musicPlayer.playAudio(this,R.raw.dingdong);
Intent intent3 = new Intent(getApplicationContext(), Main.class);
startActivity(intent3);
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
musicPlayer.playFrom();
}
@Override
protected void onStart() {
super.onStart();
musicPlayer.playFrom();
}
@Override
protected void onResume() {
super.onResume();
musicPlayer.playFrom();
}
@Override
protected void onPause() {
super.onPause();
musicPlayer.playPause();
}
@Override
protected void onStop() {
super.onStop();
musicPlayer.playPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
musicPlayer.stopAudio();
}
public class Main extends AppCompatActivity{
Music musicPlayer;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
}
}
第二项活动:
public class WelcomeActivity extends AppCompatActivity{
Music musicPlayer;
int previous;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_layout);
musicPlayer.playAudio(this,R.raw.dingdong);
Intent intent3 = new Intent(getApplicationContext(), Main.class);
startActivity(intent3);
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
musicPlayer.playFrom();
}
@Override
protected void onStart() {
super.onStart();
musicPlayer.playFrom();
}
@Override
protected void onResume() {
super.onResume();
musicPlayer.playFrom();
}
@Override
protected void onPause() {
super.onPause();
musicPlayer.playPause();
}
@Override
protected void onStop() {
super.onStop();
musicPlayer.playPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
musicPlayer.stopAudio();
}
public class Main extends AppCompatActivity{
Music musicPlayer;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
}
谢谢您的帮助。我们将尝试添加此类。为我工作
public class BackgroundSound extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr);
player.setLooping(true); // Set looping
player.setVolume(100,100);
player.start();
return null;
}
}
公共类背景声音扩展任务{
@凌驾
受保护的Void doInBackground(Void…参数){
MediaPlayer=MediaPlayer.create(YourActivity.this,R.raw.test\u cbr);
player.setLooping(true);//Set looping
播放器设置音量(100100);
player.start();
返回null;
}
}
或者更好的选择是使用
服务
。有关您可以访问的更多信息。播放服务中的音乐,请使用前台服务
Android官方文档显示:
这是一项用户主动意识到的服务,而不是
内存不足时系统要终止的候选对象。前景
服务必须为状态栏提供通知,即
置于当前标题下。这意味着通知
除非停止或删除服务,否则无法解除
从前景看
在您的情况下,播放服务中音乐的音乐播放器应设置为在前台运行,因为用户明确知道其操作。状态栏中的通知可能指示当前歌曲,并允许用户启动与音乐播放器交互的活动
下面是一个为什么不在服务类中播放音乐?尝试使用singleton类只维护类的一个实例。调用类播放音乐时,请尝试
getApplicationContext()
而不是this
。如果什么都不管用,那就用服务玩吧,这是最好的选择。