В итоге я решил свою собственную проблему. Я решил написать в моей программе работоспособную функцию с обработчиком, чтобы обеспечить цикл 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);
}
}
};
Надеюсь, это поможет людям с этой же проблемой!