我正在创建一个应用程序的问题。
基本上,我正在尝试在我的应用程序的背景中播放音乐,我可以这样做,它可以正常播放。但是,当用户切换到另一个屏幕时,音乐会重新开始,而不是像往常一样继续。
以下是我目前的所有代码:
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();
}
我不确定在我的其他课程中包括什么,所以音乐继续播放。如果有人能告诉我,我会非常感激。
谢谢。
答案 0 :(得分:2)
您已使Mediaplayer实例依赖于Activity。因此,当Activity重新启动时,会再次调用onCreate()并重新启动音乐。如果要继续播放音乐,请将mp从任何Activity实例中取出并将其放入服务中。然后从MainActivity启动服务,让它播放音乐,除非您停止服务。
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;
}
}
答案 1 :(得分:0)
将mp.release()放在onDesse方法中,而不是onPause()方法。 Caz每次新的Activity进入界面时,现有的Activity都会进入暂停状态。