当应用程序终止并重新启动服务时,继续播放并删除媒体播放器



我的程序是一个音乐播放器,我的Android Media player运行在该服务上。这里的问题是,当杀死我的应用程序时,服务会重新启动,我的玩家会从头开始工作。

public class AudioPlayerService extends Service implementsMediaPlayer.OnPreparedListener {
private String url = "https://www.dev2qa.com/demo/media/test.mp3";
private MediaPlayer mediaPlayer = null;
private String TAG = "AudioPlayerService";
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"onCreate");
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setLooping(true);
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}

mediaPlayer.prepareAsync(); // might take long! (for buffering, etc)
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY_COMPATIBILITY;
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
}

我的程序是一个音乐播放器,我的Android媒体播放器运行在该服务上。这里的问题是,当杀死我的应用程序时,服务会重新启动,我的玩家会从头开始工作。

如果用户使用"Android设置-->Apps-->your_App"页面中的相应按钮手动终止应用程序,则其所有活动、线程和服务都将终止,因为这是用户的决定。在这种情况下,那些被杀害的东西仍然被阻止。

只有当服务被系统终止时(在内存不足的情况下恢复内存资源(,如果使用STICKY标志(如您所做(,服务才会自动重新启动。

重新启动用户选择要终止的服务不是一个好的做法,但您可以使用以下方法:https://developer.android.com/training/scheduling/alarms(通过在播放执行期间每隔几秒钟创建一个警报(

是的,如果你不处理这种情况,当服务重新启动时,玩家将从头开始。因此,我认为您必须将当前位置保存在某个位置,并在系统或我上一个链接的SchedulelingAlarms重新启动服务时读取它。

最新更新