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;
    }   
}
Другие вопросы по тегам