Решения здесь:
None
в качестве значения по умолчанию (или nonce object
) и включите его, чтобы создать свои значения во время выполнения; или lambda
в качестве параметра по умолчанию и вызовите его в блоке try, чтобы получить значение по умолчанию (это то, что требуется для лямбда-абстракции). Второй вариант хорош, потому что пользователи функции могут проходить в вызываемом, который может уже существовать (например, type
)
Возможно, ваш MediaPlayer все еще находится в состоянии Idle после того, как вы позвоните mp.start()
в течение нескольких миллисекунд. В Andoid Documentation говорится, что если setVolume
вызывается из состояния Idle, ошибки не будут выдаваться, однако никаких изменений в состоянии MediaPlayer не будет.
Если это проблема, возможное исправление будет ждать, пока mp.isPlaying()
не вернет true, прежде чем вводить свой оператор switch. Возможно, что аудио драйвер Samsung имеет небольшую задержку, и это является причиной этой проблемы.
Цитата из документации Android:
Существует небольшая, но важная разница между вновь созданным объектом MediaPlayer и объектом MediaPlayer после вызова метода reset (). Это программная ошибка для вызова таких методов, как setVolume (float, float) ... в состоянии ожидания для обоих случаев.
Если любой из этих методов вызывается сразу после создания объекта MediaPlayer, предоставленный пользователем метод обратного вызова OnErrorListener.onError () не будет вызываться внутренним механизмом проигрывателя, и состояние объекта остается неизменным; но если эти методы вызываются сразу после reset (), предоставленный пользователем метод обратного вызова OnErrorListener.onError () будет вызван внутренним механизмом проигрывателя, и объект будет переведен в состояние Error.
blockquote>
Проблема решена!
Исходный код был верным, Galaxy S9 необходимо было обновить до Android 9.0 Pie, чтобы работали функции setVolume()
.
Следуя совету @ Dylan, я считаю, что это просто ошибка со стороны Samsung, подкрепленная тем фактом, что обновление системы было решением.