title: how to show notification with play/pause in exoplayer?
body: <p>I am developing streaming application, so for that i am using exoplayer. This is the code.It is working everything fine.But I need to show notification along with title and play/pause button. This play/pause button must work like activity play/pause button and this play/pause button must change as per play/pause. </p>
  
  <pre><code>public class MainActivity extends AppCompatActivity {
  
      private SimpleExoPlayer exoPlayer;
  
      private ExoPlayer.EventListener eventListener = new ExoPlayer.EventListener() {
          @Override
          public void onTimelineChanged(Timeline timeline, Object manifest) {
              Log.i(TAG,"onTimelineChanged");
          }
  
          @Override
          public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
              Log.i(TAG,"onTracksChanged");
          }
  
          @Override
          public void onLoadingChanged(boolean isLoading) {
              Log.i(TAG,"onLoadingChanged");
          }
  
          @Override
          public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
              Log.i(TAG,"onPlayerStateChanged: playWhenReady = "+String.valueOf(playWhenReady)
                      +" playbackState = "+playbackState);
              switch (playbackState){
                  case ExoPlayer.STATE_ENDED:
                      Log.i(TAG,"Playback ended!");
                      //Stop playback and return to start position
                      setPlayPause(false);
                      exoPlayer.seekTo(0);
                      break;
                  case ExoPlayer.STATE_READY:
                      Log.i(TAG,"ExoPlayer ready! pos: "+exoPlayer.getCurrentPosition()
                              +" max: "+stringForTime((int)exoPlayer.getDuration()));
                      setProgress();
                      break;
                  case ExoPlayer.STATE_BUFFERING:
                      Log.i(TAG,"Playback buffering!");
                      break;
                  case ExoPlayer.STATE_IDLE:
                      Log.i(TAG,"ExoPlayer idle!");
                      break;
              }
          }
  
          @Override
          public void onPlayerError(ExoPlaybackException error) {
              Log.i(TAG,"onPlaybackError: "+error.getMessage());
          }
  
          @Override
          public void onPositionDiscontinuity() {
              Log.i(TAG,"onPositionDiscontinuity");
          }
      };
  
      private SeekBar seekPlayerProgress;
      private Handler handler;
      private ImageButton btnPlay;
      private TextView txtCurrentTime, txtEndTime;
      private boolean isPlaying = false;
  
      private static final String TAG = "MainActivity";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          prepareExoPlayerFromURL(Uri.parse("https://firebasestorage.googleapis.com/v0/b/musyc-f264f.appspot.com/o/Karone-Okarone-Minar-Rahman-Official-Music-Video-Eagle-Music.mp3?alt=media&amp;token=a40ed28a-2970-4160-ac1d-33881e34253a"));
      }
  
  
      private void prepareExoPlayerFromURL(Uri uri){
  
          TrackSelector trackSelector = new DefaultTrackSelector();
  
          LoadControl loadControl = new DefaultLoadControl();
  
          exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
  
          DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "exoplayer2example"), null);
          ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
          MediaSource audioSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null);
          exoPlayer.addListener(eventListener);
  
          exoPlayer.prepare(audioSource);
          initMediaControls();
      }
  
  
  
      private void initMediaControls() {
          initPlayButton();
          initSeekBar();
          initTxtTime();
      }
  
      private void initPlayButton() {
          btnPlay = (ImageButton) findViewById(R.id.btnPlay);
          btnPlay.requestFocus();
          btnPlay.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  setPlayPause(!isPlaying);
              }
          });
      }
  
      /**
       * Starts or stops playback. Also takes care of the Play/Pause button toggling
       * @param play True if playback should be started
       */
      private void setPlayPause(boolean play){
          isPlaying = play;
          exoPlayer.setPlayWhenReady(play);
          if(!isPlaying){
              btnPlay.setImageResource(android.R.drawable.ic_media_play);
          }else{
              setProgress();
              btnPlay.setImageResource(android.R.drawable.ic_media_pause);
          }
      }
  
      private void initTxtTime() {
          txtCurrentTime = (TextView) findViewById(R.id.time_current);
          txtEndTime = (TextView) findViewById(R.id.player_end_time);
      }
  
      private String stringForTime(int timeMs) {
          StringBuilder mFormatBuilder;
          Formatter mFormatter;
          mFormatBuilder = new StringBuilder();
          mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
          int totalSeconds =  timeMs / 1000;
  
          int seconds = totalSeconds % 60;
          int minutes = (totalSeconds / 60) % 60;
          int hours   = totalSeconds / 3600;
  
          mFormatBuilder.setLength(0);
          if (hours &gt; 0) {
              return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString();
          } else {
              return mFormatter.format("%02d:%02d", minutes, seconds).toString();
          }
      }
  
      private void setProgress() {
          seekPlayerProgress.setProgress(0);
          seekPlayerProgress.setMax((int) exoPlayer.getDuration()/1000);
          txtCurrentTime.setText(stringForTime((int)exoPlayer.getCurrentPosition()));
          txtEndTime.setText(stringForTime((int)exoPlayer.getDuration()));
  
          if(handler == null)handler = new Handler();
          //Make sure you update Seekbar on UI thread
          handler.post(new Runnable() {
              @Override
              public void run() {
                  if (exoPlayer != null &amp;&amp; isPlaying) {
                      seekPlayerProgress.setMax((int) exoPlayer.getDuration()/1000);
                      int mCurrentPosition = (int) exoPlayer.getCurrentPosition() / 1000;
                      seekPlayerProgress.setProgress(mCurrentPosition);
                      txtCurrentTime.setText(stringForTime((int)exoPlayer.getCurrentPosition()));
                      txtEndTime.setText(stringForTime((int)exoPlayer.getDuration()));
  
                      handler.postDelayed(this, 1000);
                  }
              }
          });
      }
  
      private void initSeekBar() {
          seekPlayerProgress = (SeekBar) findViewById(R.id.mediacontroller_progress);
          seekPlayerProgress.requestFocus();
  
          seekPlayerProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
              @Override
              public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                  if (!fromUser) {
                      // We're not interested in programmatically generated changes to
                      // the progress bar's position.
                      return;
                  }
  
                  exoPlayer.seekTo(progress*1000);
              }
  
              @Override
              public void onStartTrackingTouch(SeekBar seekBar) {
  
              }
  
              @Override
              public void onStopTrackingTouch(SeekBar seekBar) {
  
              }
          });
  
          seekPlayerProgress.setMax(0);
          seekPlayerProgress.setMax((int) exoPlayer.getDuration()/1000);
  
      }
  
  
  }
  </code></pre>
  
  <p>I have tried many ways.
   <a href="https://stackoverflow.com/questions/23443946/music-player-control-in-notification">Music player control in notification</a> </p>
  
  <p><a href="https://stackoverflow.com/questions/12526228/how-to-put-media-controller-button-on-notification-bar?noredirect=1&amp;lq=1">How to put media controller button on notification bar?</a></p>
  
  <p><a href="https://github.com/yalematta/ExoPlayback" rel="noreferrer">https://github.com/yalematta/ExoPlayback</a></p>
  
  <p>but not working. So can any please help me how to do this, Thank you so much for your suggestion..</p>