Кнопки действий медиаплеера "Вперед", "Назад", "Повторить" и "Перемешать"

Почему-то кнопки повтора и перемешивания ничего не делают.

Кнопки предыдущая и следующая работают отлично.

В моем приложении я общаюсь со своим сервисом через трансляции.

mediaPlayer является общедоступной статикой в ​​моем классе обслуживания, и я импортирую ее в другое действие.

public static MediaPlayer mediaPlayer = new MediaPlayer(); (В Service.class)

Деятельность

Это код для кнопок

if (mediaPlayer != null) {
        if (mediaPlayer.isPlaying()) {
            mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
            tvSongListSize.setText((songIndex + 1) + "/" + songList.size());
            updateProgressBar();
        }
    }

    mBtnShuffle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isShuffle){
                isShuffle = false;
                Toast.makeText(getContext(), "Shuffle is off", Toast.LENGTH_SHORT ).show();
                mBtnShuffle.setImageResource(R.drawable.ic_action_shuffle);
            }else{
                isShuffle = true;
                Toast.makeText(getContext(), "Shuffle is on", Toast.LENGTH_SHORT).show();
                mBtnShuffle.setImageResource(R.drawable.ic_shuffle_on);
                isRepeat = false;
                mBtnRepeat.setImageResource(R.drawable.ic_action_repeat);
            }
        }
    });

    mBtnRepeat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isRepeat){
                isRepeat = false;
                Toast.makeText(getContext(), "Repeat is off", Toast.LENGTH_SHORT).show();
                mBtnRepeat.setImageResource(R.drawable.ic_action_repeat);
            }else{
                isRepeat = true;
                Toast.makeText(getContext(), "Repeat is on", Toast.LENGTH_SHORT).show();
                mBtnRepeat.setImageResource(R.drawable.ic_repeat_on);
                isShuffle = false;
                mBtnShuffle.setImageResource(R.drawable.ic_action_shuffle);
            }
        }
    });


    mBtnPlayPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                if (mediaPlayer != null) {
                    if (mediaPlayer.isPlaying()) {
                        mediaPlayer.pause();
                        mBtnPlayPause.setImageResource(R.drawable.ic_action_play);
                    } else {
                        mediaPlayer.start();
                        mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    mBtnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nextSong();
        }
    });

    mBtnPrev.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            prevSong();
        }
    });

Код в onCompletionListener

@Override
public void onCompletion(MediaPlayer mp) {
    if (isRepeat){
        //Store current songIndex in mSharedPreferences
        StorageUtil storageUtil = new StorageUtil(getContext());
        storageUtil.storeSongIndex(songIndex);

        //Send media with BroadcastReceiver
        Intent broadCastReceiverIntent = new Intent(Constants.ACTIONS.BROADCAST_PlAY_NEW_SONG);
        if (getActivity() != null) {
            getActivity().sendBroadcast(broadCastReceiverIntent);
        }
    }else if(isShuffle){
        Random random = new Random();
        songIndex  = random.nextInt((songList.size() - 1) + 1);
        tvSongListSize.setText((songIndex + 1) + "/" + songList.size());

        //Store random songIndex in mSharedPreferences
        StorageUtil storageUtil = new StorageUtil(getContext());
        storageUtil.storeSongIndex(songIndex);

        //Send media with BroadcastReceiver
        Intent broadCastReceiverIntent = new Intent(Constants.ACTIONS.BROADCAST_PlAY_NEW_SONG);
        if (getActivity() != null) {
            getActivity().sendBroadcast(broadCastReceiverIntent);
        }
    }else if (songIndex < songList.size()-1){
        mediaPlayer.reset();
        nextSong();
        tvSongListSize.setText((songIndex + 1) + "/" + songList.size());
    }else{
        songIndex = 0;
        tvSongListSize.setText((1) + "/" + songList.size());

        //Store random songIndex in mSharedPreferences
        StorageUtil storageUtil = new StorageUtil(getContext());
        storageUtil.storeSongIndex(songIndex);

        //Send media with BroadcastReceiver
        Intent broadCastReceiverIntent = new Intent(Constants.ACTIONS.BROADCAST_PlAY_NEW_SONG);
        if (getActivity() != null) {
            getActivity().sendBroadcast(broadCastReceiverIntent);
        }
    }
}

Приемник вещания

 private BroadcastReceiver NewSongBroadCastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        songList = new StorageUtil(getApplicationContext()).getSongs();
        songIndex = new StorageUtil(getApplicationContext()).loadSongIndex();
        if (songIndex != -1 && songIndex < songList.size()){
            activeSong = songList.get(songIndex);
        }else{
            stopSelf();
        }
        stopSong();
        mediaPlayer.reset();
        if (mMediaSessionManager == null) {
            try {
                initMediaSession();
                initMediaPlayer();
            } catch (RemoteException e) {
                e.printStackTrace();
                stopSelf();
            }
        }
        initMediaPlayer();
        updateMetaData();
        NotificationBuilder(PlaybackStatus.PLAYING);
    }
};

1 ответ

Кнопки mBtnShuffle а также mBtnRepeat не срабатывать onCompletion, Это всего лишь две обычные кнопки, которые вы используете для установки флагов isShuffle и isRepeat.
onCompletion запускается, когда песня завершена.
Поэтому, если вы хотите, чтобы что-то происходило при нажатии двух кнопок, вы должны поместить некоторый код в их слушатели.

Другие вопросы по тегам