简体   繁体   English

MediaController播放图标以编程方式更改为暂停图标

[英]MediaController Play Icon to change to Pause Icon programmatically

I am using exoPlayer to play music, I am controlling the music through mediaController that android provides. 我使用exoPlayer播放音乐,我通过android提供的mediaController控制音乐。 What I really want is that any external events such as phone call should not only pause playback but also change the icon to pause. 我真正想要的是任何外部事件(例如电话呼叫)都不仅应暂停播放,还应将图标更改为暂停。 I have managed to use the telephoneManager Api to find whether I am on call or not and I am able to pause the mediaPlayBack on Pause but I am clearly unable to change the playback icon to pause on this call event. 我已经设法使用电话管理器Api查找我是否在通话中,并且能够在“暂停”时暂停mediaPlayBack,但显然无法更改播放图标以在此通话事件上暂停。

The MediaPlayerControl has a pause() function which I call where I pause the playback. MediaPlayerControl有一个pause()函数,在暂停播放的地方调用该函数。 The playBack pauses but icon doesn't change, Let me know if there is any good way to do so 播放暂停,但图标未更改,请告诉我是否有任何好的方法

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);
  }

}

(It appears that this question is still open). (看来这个问题仍未解决)。 I would think you can change your icon within the override of your Activity onPause(), as follows: 我认为您可以在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;
    }   
}

Similarly, you can change the icon back when your app is resuming, via the onResume() @override: 同样,您可以在应用恢复时通过onResume()@override将图标改回来:

@Override
public void onResume() {
    super.onResume();
    if (!isPlayIconOn) {
       // insert code to change your icon to "play" here;
       isPlayIconOn=true;
    }   
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 单击播放和暂停时更改按钮图标 - Change Button icon on click play and pause 如何使用RecyclerView更改ListView中的播放/暂停音频图标? - How to Change Play/Pause audio icon within a ListView using RecyclerView? 单击 Android 时更改播放/暂停按钮图标 - Android change play/pause button icon when clicked 更改 playerNotificationManager 的操作图标,例如播放/暂停/停止 - Change action icon of playerNotificationManager like play/pause/stop 在两个ImageButton中完成播放声音后将暂停图标更改为播放图标 - To change pause icon to play icon when the sound finish playing in two ImageButtons 以编程方式更改ActionBar图标 - Programmatically change ActionBar icon 以编程方式更改ICON googlemaps - Change ICON programmatically googlemaps 以编程方式更改MediaController图标 - Change MediaController icons programmatically 以编程方式更改 MaterialButton 图标的图标色调 [Kotlin] - Change the icon tint of a MaterialButton icon programmatically [Kotlin] Java - Android 媒体播放器 - 将图标播放更改为暂停。 背部不工作 - Java - Android Media Player - change icon play to pause. Back not working
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM