Kotlin - Как включить изменение громкости? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь установить постоянный объем с помощью AudioManager, меняя его каждый раз.

Вот мой код:

private val broadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if ("android.media.VOLUME_CHANGED_ACTION" == intent.action) {
                audioManager.setStreamVolume(AudioManager.STREAM_RING, constDeviceVolume, 0)
            }
        }
    }

Проблема в том, что это строка audioManager.setStreamVolume(AudioManager.STREAM_RING, constDeviceVolume, 0) триггеров onReceive() веселья.

Мне нужно изменить громкость, не вызывая orReceive() забавный или альтернативный метод.

1 Ответ

1 голос
/ 25 апреля 2019

Может быть, ты справишься с этим так?

private val broadcastReceiver = object : BroadcastReceiver() {
var wasVolumeChangedByApp = false
override fun onReceive(context: Context, intent: Intent) {
    if ("android.media.VOLUME_CHANGED_ACTION" == intent.action && !wasVolumeChangedByApp) {
        audioManager.setStreamVolume(AudioManager.STREAM_RING, constDeviceVolume, 0)
        wasVolumeChangedByApp = true
        return
    }
    wasVolumeChangedByApp = false
}

Когда установлен логический флаг (указывающий, что ваше приложение изменило громкость), обработка onReceive () просто игнорируется. Этот флаг затем сбрасывается, поэтому вызов onReceive впоследствии будет обрабатываться по желанию.

...