应用终止后继续播放andorid媒体播放器并重新启动服务

时间:2018-07-17 12:05:33

标签: android service android-mediaplayer

我的程序是音乐播放器,并且我的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 Media Player在该服务上运行。这里的问题是,当杀死我的应用程序时,该服务将重新启动,并且播放器将从头开始工作。

1 个答案:

答案 0 :(得分:0)

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

仅当服务被系统杀死(以在LowMemory情况下恢复内存资源)时,如果使用STICKY标志(如您所做的那样),服务将自动重新启动。

重新启动用户选择终止的服务不是一个好习惯,但是您可以使用以下命令来完成此操作:https://developer.android.com/training/scheduling/alarms(通过在播放执行过程中每隔几秒钟创建一个警报)< / p>

是的,如果您无法解决此问题,则在重新启动服务后,播放器将从头开始重新启动。因此,我认为您必须将当前位置保存在某个位置,并在系统或我之前链接的SchedulingAlarms重新启动服务时读取该位置。