安卓音乐播放器问题(初学者)

3

我正在开发一个应用,遇到了问题。

基本上,我想让我的应用程序在后台播放音乐,我可以做到并且它可以正常播放。 然而,当用户切换到另一个屏幕时,音乐重新启动,而不是像平常一样继续播放。

以下是我目前拥有的所有代码:

public class MainActivity extends Activity {    


MediaPlayer mp;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //setting the layout

    mp = MediaPlayer.create(this, R.raw.song);
    mp.setLooping(true);
    mp.getDuration();
    mp.start();

在这个类的末尾,我有一个方法来在应用关闭时停止音乐:

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();


    mp.release();
    finish();

}

我不确定在其他类中应该包括什么内容,以使音乐继续播放。如果有人能够向我展示,我将非常感激。

谢谢。

2个回答

2

您已经让Mediaplayer实例依赖于Activity。因此,当Activity重新启动时,onCreate()会再次调用并且音乐会重新开始播放。如果您想继续播放音乐,请将mp从任何Activity实例中取出并放入Service中。然后从MainActivity启动Service,并让其播放音乐,除非您停止Service。

  public class MainActivity extends ListActivity {




    /** Called when the activity is first created. */

Intent i; 
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.splash);
       i=new Intent(this, MyMusicService.class);
       final ToggleButton togglebutton =(ToggleButton)findViewById(R.id.toggleButton1);
      togglebutton.setOnClickListener(new OnClickListener() {  
          public void onClick(View v) {   
              // Perform action on clicks    
              if (togglebutton.isChecked()) {   
                  Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();  
                  startService(i);  
              } else {   
                  stopService(i);
                  Toast.makeText(MainActivity.this, "Not checked", Toast.LENGTH_SHORT).show(); 
                      }    }});





}
@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
stopService(i);
}
}

这是服务内容:

该服务具体如下:

   public class MyMusicService extends Service {
    MediaPlayer mp;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
     mp = MediaPlayer.create(this, R.raw.song);


        mp.start();
mp.setLooping(true);

    return super.onStartCommand(intent, flags, startId);
}


@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if(mp!=null)
        mp.release();
    mp=null;
}
}

在你的清单文件中添加以下行:<service android:name="MyMusicService"></service>。 - Akhil
是的,抱歉我这样做了,但我认为你所说的“注册”意味着其他事情。它仍然无法播放。您还有其他建议吗?对我的经验不足表示歉意。 - Matthew Perrott
谢谢,现在它完美地运作了。不过我还有两个问题:1)当我关闭应用程序时,音乐不会停止。 2)你知道我如何在另一个类(选项)中制作一个可以停止和开始音乐的ToggleButton吗?非常感谢您的帮助。 - Matthew Perrott
我很想帮忙,但显然我的声望不够:(非常抱歉。 - Matthew Perrott
在上述代码中,用户可以从raw文件夹播放声音。如果用户想要从任何动态选择的路径播放它,该怎么办呢? - Shreyash Mahajan
显示剩余6条评论

0
将mp.release()放在onDestroy方法中而不是onPause()方法中。因为每当一个新的Activity进入界面时,现有的Activity都会进入暂停状态。

非常感谢您的回复。这解决了音乐停止播放的问题。然而,它又创建了一个新问题,每次他们转到新屏幕并返回MainActivity类时,音乐会播放两次。有什么想法吗? - Matthew Perrott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接