Java 媒体播放器中的重复出现问题。主题服务/Android
我有1项活动和1项服务,我尝试播放媒体文件,我有3个按钮“播放/停止/暂停”,有人能帮我解释一下为什么当我听完mp3播放器后,我可以在按“播放”后再次开始播放音乐吗??? 我的错在哪里,我不明白 公共类MyService扩展服务{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
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");
}
}
}