Java 媒体播放器中的重复出现问题。主题服务/Android

Java 媒体播放器中的重复出现问题。主题服务/Android,java,android,service,Java,Android,Service,我有1项活动和1项服务,我尝试播放媒体文件,我有3个按钮“播放/停止/暂停”,有人能帮我解释一下为什么当我听完mp3播放器后,我可以在按“播放”后再次开始播放音乐吗??? 我的错在哪里,我不明白 公共类MyService扩展服务{ private static final String TAG = "MyService"; private MediaPlayer mediaPlayer; private IBinder binder = new MyServiceBinde

我有1项活动和1项服务,我尝试播放媒体文件,我有3个按钮“播放/停止/暂停”,有人能帮我解释一下为什么当我听完mp3播放器后,我可以在按“播放”后再次开始播放音乐吗??? 我的错在哪里,我不明白

公共类MyService扩展服务{

private static final String TAG = "MyService";

private MediaPlayer mediaPlayer;
private IBinder binder = new MyServiceBinder();
private int pausePosition;
private boolean isMusicStopped = true;


public class MyServiceBinder extends Binder {

    @NonNull
    public MyService getService() {
        return MyService.this;
    }
}

@Nullable
@Override
public IBinder onBind(Intent intent) {

    if (binder == null) {
        binder = new MyServiceBinder();
    }

    Log.d(TAG, "onBind: BIND");
    return binder;
}

@Override
public boolean onUnbind(Intent intent) {
    Log.d(TAG, "onUnbind: UNBIND");
    return super.onUnbind(intent);
}

@Override
public void onRebind(Intent intent) {
    super.onRebind(intent);
    Log.d(TAG, "onRebind: REBIND");
}

@Override
public void onCreate() {
    super.onCreate();

    if (mediaPlayer == null) {
        mediaPlayer = MediaPlayer.create(this, R.raw.media_file1);
    }
    playMusic();
    Log.d(TAG, "onCreate: service on created");

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    playMusic();

    Log.d(TAG, "onStartCommand: service started");
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    stopMusic();
    mediaPlayer.release();
    Log.d(TAG, "onDestroy: service destroyed");
}

public void playMusic() {
    if (mediaPlayer != null && getPausePosition() != 0) {
        mediaPlayer.seekTo(getPausePosition());
    }
    if (isMusicStopped) {
        mediaPlayer.start();
        isMusicStopped = false;
        mediaPlayer = null;
    }
    Log.d(TAG, "playMusic: PLAY");
}

public void pauseMusic() {
    if (mediaPlayer != null && mediaPlayer.getCurrentPosition() != 0 && mediaPlayer.getCurrentPosition() != mediaPlayer.getDuration()) {
        mediaPlayer.pause();
        isMusicStopped = true;
    }
    Log.d(TAG, "pauseMusic: PAUSE");
}

public void stopMusic() {

    if (mediaPlayer != null) {
        mediaPlayer.pause();
        pausePosition = mediaPlayer.getCurrentPosition();
        mediaPlayer.stop();
        isMusicStopped = true;

    }
    Log.d(TAG, "stopMusic: STOP");
}

public int getPausePosition() {
    return pausePosition;
}
公共类MainActivity扩展了AppCompatActivity{

private static final String TAG = "MainActivity";

private boolean isServiceBound;
private Intent serviceIntent;
private MyService myService;

private TextView name;
private TextView singer;
private TextView styleOfMusic;

private Button play;
private Button pause;
private Button stop;

private ServiceConnection serviceConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName className,
                                   IBinder service) {

        MyService.MyServiceBinder binder = (MyService.MyServiceBinder) service;
        myService = binder.getService();
        isServiceBound = true;
        Log.d(TAG, "onServiceConnected: BINDER connected");
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        isServiceBound = false;
        Log.d(TAG, "onServiceDisconnected: BINDER disconnected");
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    name = findViewById(R.id.music_name);
    singer = findViewById(R.id.music_singer);
    styleOfMusic = findViewById(R.id.music_style);

    play = findViewById(R.id.play);
    pause = findViewById(R.id.pause);
    stop = findViewById(R.id.stop);

    serviceIntent = new Intent(this, MyService.class);

    play.setOnClickListener(view -> {
        bindService(serviceIntent, serviceConnection, BIND_AUTO_CREATE);
        play();

    });

    pause.setOnClickListener(view -> {
        pause();
    });

    stop.setOnClickListener(view -> stop());

}

private void play() {
    if (isServiceBound) {
        startService(serviceIntent);

    }

    Log.d(TAG, "play: LOAD and START and SAVE");
}

private void pause() {
    if (isServiceBound) {
        myService.pauseMusic();

    }
    Log.d(TAG, "pause: SAVE DATA and PAUSE");
}

private void stop() {
    if (isServiceBound) {
        unbindService(serviceConnection);
        stopService(serviceIntent);
        isServiceBound = false;

        Log.d(TAG, "stop: SAVE  DATA and STOP");
    }
}
}