Я разрабатываю потоковое приложение, поэтому для этого я использую exoplayer.Это код. Работает все нормально. Но мне нужно показать уведомление вместе с заголовком и кнопкой воспроизведения / паузы.Эта кнопка воспроизведения / паузы должна работать аналогично кнопке воспроизведения / паузы, и эта кнопка воспроизведения / паузы должна меняться в соответствии с воспроизведением / паузой.
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&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 > 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 && 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);
}
}
Я пробовал много способов. Управление музыкальным проигрывателем в уведомлении
Как разместить кнопку контроллера мультимедиа на панели уведомлений?
https://github.com/yalematta/ExoPlayback
, но неза работой.Так может кто-нибудь, пожалуйста, помогите мне, как это сделать, Большое спасибо за ваше предложение ..