Программирование Music Player AB repeat - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь написать функцию повтора AB для моего медиаплеера.Я уже попробовал функцию Runnable с условным оператором if, когда он доберется до маркера B, он вернется к стартовому маркеру, сохранив позицию в аудиопотоке с помощью функции mediaplayer.getCurrentPosition ().Я также пробовал цикл while, который также приводил к неудовлетворительным результатам при зависании приложения.Вот текущий код, который у меня есть для такого метода.

public void aButton() {
        start = mediaPlayer.getCurrentPosition();
    }

    public void bButton() {
        pressedCount += 1;
        System.out.println("AB Button Count: " + pressedCount);
        stop = mediaPlayer.getCurrentPosition();
        mediaPlayer.seekTo(start);
        if(mediaPlayer.getCurrentPosition() == stop){
            mediaPlayer.seekTo(start);
        }
    }

1 Ответ

0 голосов
/ 28 февраля 2019

В итоге я решил свою собственную проблему. Я решил написать в моей программе работоспособную функцию с обработчиком, чтобы обеспечить цикл while без необходимости обработки исключений.Я установил счетчики для мест соединения a и b в аудиопотоке.Я убедился, что обе кнопки были нажаты только один раз с помощью счетчика aCount + = 1; и bCount + = 1 .Если бы они оба были нажаты, программа передаст управление функции Runnable, которая проверяет getCurrentPosition () каждые 100 миллисекунд, и если поток находится в или после позиции остановки (определенной в начале метода кнопки B), он будет искать) начальная позиция, определенная в начале метода кнопки А.Затем я установил способы возобновления нормального воспроизведения, если какая-либо кнопка была нажата более одного раза.

Вот код, показывающий изменения, которые я внес в код:

public void aButton() {
        start = mediaPlayer.getCurrentPosition();

        if (aCount > 1 && bCount == 1) {
            aCount = 0;
            bCount = 0;
        }
        aCount += 1;

    }

    public void bButton() {
        stop = mediaPlayer.getCurrentPosition();

        if (bCount > 1 && aCount >= 1) {
            bCount = 0;
            aCount = 0;
        }

        if (aCount != 1) {
            Toast.makeText(this, "Please press A first", Toast.LENGTH_SHORT).show();
            bCount = 0;
        }
        if(bCount == 0 && aCount == 1){
            bCount += 1;
        }

        System.out.println("AB Button Count: " + bCount);
        /*mediaPlayer.seekTo(start);*/
        abLoopHandler.removeCallbacks(abLoop);
        abLoopHandler.postDelayed(abLoop, 100);
    }

    private Runnable abLoop = new Runnable() {
        @Override
        public void run() {
            if (aCount == 1 && bCount == 1) {
                int currPos = mediaPlayer.getCurrentPosition();
                if (currPos >= stop) {
                    mediaPlayer.seekTo(start);
                }
                abLoopHandler.postDelayed(this, 100);
            }
        }
    };

Надеюсь, это поможет людям с этой же проблемой!

...