Android 尝试使用服务进行暂停/恢复音乐活动
我正在尝试创建一个布局中只有一个按钮的活动,当按下按钮时,它将暂停或恢复音乐。问题是,当按下它恢复音乐时,它会重新启动音频文件。你知道如何让它从最后一点开始播放而不是重新开始吗 主要活动Android 尝试使用服务进行暂停/恢复音乐活动,android,service,Android,Service,我正在尝试创建一个布局中只有一个按钮的活动,当按下按钮时,它将暂停或恢复音乐。问题是,当按下它恢复音乐时,它会重新启动音频文件。你知道如何让它从最后一点开始播放而不是重新开始吗 主要活动 public class MainActivity extends Activity implements OnClickListener { private Boolean isMusicPlaying; @Override protected void onCreate(Bund
public class MainActivity extends Activity implements OnClickListener {
private Boolean isMusicPlaying;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View musicButton = findViewById(R.id.music_button);
musicButton.setOnClickListener(this);
startService(new Intent(getBaseContext(), MusicService.class));
isMusicPlaying = true;
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.music_button)
if (isMusicPlaying) stopService(new Intent(getBaseContext(),
MusicService.class));
else startService(new Intent(getBaseContext(), MusicService.class));
isMusicPlaying = !isMusicPlaying;
}
}
服务等级
public class MusicService extends Service {
MediaPlayer player;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.song);
player.setLooping(true); // Set looping
player.setVolume(100, 100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return START_STICKY;
}
@Override
public void onDestroy() {
player.pause();
}
}
停止服务时,服务中的MediaPlayer对象似乎没有保留。 在停止服务之前,您可以使用getCurrentPosition()方法获取歌曲的当前位置
player.pause();
currentPos = player.getCurrentPosition();
并在停止之前将此值发送回“活动”
然后,您可以使用seekTo(int)方法在播放之前移动到指定的时间位置
player.seekTo(currentPos);
player.start();
对于服务和活动之间的通信,您可以注册broadcastreceiver并使用intent或使用
更新:
我发现下面的教程,你最好按照这个。这是关于使用MediaPlayer的服务。
特别是,在初始化MediaPlayer时,根本不使用prepare方法。请写以下几行:
player.setOnPreparedListener(this);
player.prepareAsync();
并添加侦听器:
public void onPrepared(MediaPlayer player) {
player.start();
}
看到活动已重新启动,为什么不将状态保存到共享首选项中您是否从服务中获得了正确的当前位置,但它不起作用?当我声明currentPos时,我将其值设为10000,因此音乐将在歌曲播放10秒后开始播放,但它不起作用。每当您停止并重新启动服务时,调用onCreate方法时,请确保将正确的值从服务传递给活动,并在重新启动时将该值设置给mediaplayer。