2015-08-24 2 views
1

Я использую exoPlayer для воспроизведения музыки, я контролирую музыку через mediaController, который предоставляет андроид. Я действительно хочу, чтобы любые внешние события, такие как телефонный звонок, не только приостанавливали воспроизведение, но и изменяли значок для паузы. Мне удалось использовать phoneManager Api, чтобы узнать, звоню ли я или нет, и я могу приостановить mediaPlayBack on Pause, но я явно не могу изменить значок воспроизведения, чтобы приостановить это событие вызова.Значок MediaController Play для изменения значка паузы программно

Функция MediaPlayerControl имеет функцию паузы(), которую я вызываю там, где я приостанавливаю воспроизведение. Воспроизведение приостанавливается, но значок не изменится, дайте мне знать, если есть хороший способ сделать так

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

} 
+0

Я испытываю эту проблему прямо сейчас. Вы еще это выяснили? – DaveNOTDavid

ответ

0

(По-видимому, этот вопрос остается открытым). Я думаю, что вы можете изменить значок в переопределении вашей деятельности 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; 
    } 
}