MediaController Play Icon для программного изменения в Pause Icon
Я использую exoPlayer для воспроизведения музыки, я управляю музыкой через mediaController, который предоставляет Android. Что я действительно хочу, так это то, что любые внешние события, такие как телефонный звонок, должны не только приостанавливать воспроизведение, но также менять значок на паузу. Мне удалось использовать phoneManager Api, чтобы определить, звоню я или нет, и я могу приостановить mediaPlayBack на паузе, но я явно не могу изменить значок воспроизведения, чтобы приостановить это событие вызова.
MediaPlayerControl имеет функцию pause(), которую я вызываю, когда я приостанавливаю воспроизведение. PlayBack делает паузу, но значок не меняется, дайте мне знать, если есть хороший способ сделать это
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
PlayerControl.pause();
}
if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
PlayerControl.pause();
}
super.onCallStateChanged(state, incomingNumber);
}
};
public class PlayerControl implements MediaPlayerControl {
private final ExoPlayer exoPlayer;
public PlayerControl(ExoPlayer exoPlayer) {
this.exoPlayer = exoPlayer;
}
@Override
public boolean canPause() {
return true;
}
@Override
public boolean canSeekBackward() {
return true;
}
@Override
public boolean canSeekForward() {
return true;
}
/**
* This is an unsupported operation.
* <p>
* Application of audio effects is dependent on the audio renderer used. When using
* {@link com.google.android.exoplayer.MediaCodecAudioTrackRenderer}, the recommended approach is
* to extend the class and override
* {@link com.google.android.exoplayer.MediaCodecAudioTrackRenderer#onAudioSessionId}.
*
* @throws UnsupportedOperationException Always thrown.
*/
@Override
public int getAudioSessionId() {
throw new UnsupportedOperationException();
}
@Override
public int getBufferPercentage() {
return exoPlayer.getBufferedPercentage();
}
@Override
public int getCurrentPosition() {
return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
: (int) exoPlayer.getCurrentPosition();
}
@Override
public int getDuration() {
return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
: (int) exoPlayer.getDuration();
}
@Override
public boolean isPlaying() {
return exoPlayer.getPlayWhenReady();
}
@Override
public void start() {
exoPlayer.setPlayWhenReady(true);
}
@Override
public void pause() {
exoPlayer.setPlayWhenReady(false);
}
@Override
public void seekTo(int timeMillis) {
long seekPosition = exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
: Math.min(Math.max(0, timeMillis), getDuration());
exoPlayer.seekTo(seekPosition);
}
}
1 ответ
(Похоже, этот вопрос все еще открыт). Я думаю, вы можете изменить свой значок в переопределении вашей Activity onPause() следующим образом:
Boolean isPlayIconOn;
isPlayIconOn=true; // set this flag to true when your icon is on "play"
@Override
public void onPause() {
super.onPause();
if (isPlayIconOn) {
// insert code to change your icon to "pause" here;
isPlayIconOn=false;
}
}
Аналогично, вы можете изменить значок обратно, когда ваше приложение возобновляет работу, с помощью onResume() @override:
@Override
public void onResume() {
super.onResume();
if (!isPlayIconOn) {
// insert code to change your icon to "play" here;
isPlayIconOn=true;
}
}