下一个,上一个,重复和随机播放的Mediaplayer操作按钮

时间:2018-07-31 08:15:48

标签: java android service android-mediaplayer onclicklistener

由于某些原因,重复和随机播放按钮没有任何作用。

上一个和下一个按钮完美工作。

在我的应用中,我正在通过广播与服务进行通信。

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 个答案:

答案 0 :(得分:0)

按钮mBtnShufflemBtnRepeat不会触发onCompletion。它们只是用于设置标志isShuffle和isRepeat的2个普通按钮。
{strong>歌曲完成后会触发onCompletion
因此,如果您希望在点击两个按钮时发生某些事情,则应在其侦听器中放入一些代码。