LevoSharp
LevoSharp

Reputation: 39

AudioManager Context, Android Kotlin Fragment

how i can create AudioManager in Fragment ? I use this and it is not work.

val audioManager: AudioManager = getSystemService(AUDIO_SERVICE) as AudioManager

Thanks all!

Upvotes: 2

Views: 1255

Answers (2)

Depezo
Depezo

Reputation: 11

This question is 3 years old, but I hope it can help someone who has the same problem.

First, create a class named VolumeManager

class VolumeManager(private val audioManager: AudioManager) {

    var loudnessEnhancer: LoudnessEnhancer? = null
        set(value) {
            if (currentVolume > maxStreamVolume) {
                try {
                    value?.enabled = true
                    value?.setTargetGain(currentLoudnessGain.toInt())
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
            field = value
        }
    val currentStreamVolume get() = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
    val maxStreamVolume get() = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)

    var currentVolume = currentStreamVolume.toFloat()
        private set
    val maxVolume get() = maxStreamVolume.times(loudnessEnhancer?.let { 2 } ?: 1)

    val currentLoudnessGain get() = (currentVolume - maxStreamVolume) * (MAX_VOLUME_BOOST / maxStreamVolume)
    val volumePercentage get() = (currentVolume / maxStreamVolume.toFloat()).times(100).toInt()

    @Suppress("DEPRECATION")
    fun setVolume(volume: Float, showVolumePanel: Boolean = false) {
        currentVolume = volume.coerceIn(0f, maxVolume.toFloat())

        if (currentVolume <= maxStreamVolume) {
            loudnessEnhancer?.enabled = false
            audioManager.setStreamVolume(
                AudioManager.STREAM_MUSIC,
                currentVolume.toInt(),
                if (showVolumePanel && audioManager.isWiredHeadsetOn) AudioManager.FLAG_SHOW_UI else 0,
            )
        } else {
            try {
                loudnessEnhancer?.enabled = true
                loudnessEnhancer?.setTargetGain(currentLoudnessGain.toInt())
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    fun increaseVolume(showVolumePanel: Boolean = false) {
        setVolume(currentVolume + 1, showVolumePanel)
    }

    fun decreaseVolume(showVolumePanel: Boolean = false) {
        setVolume(currentVolume - 1, showVolumePanel)
    }

    companion object {
        const val MAX_VOLUME_BOOST = 2000
    }
}

and call this on your fragment

private lateinit var volumeManager: VolumeManager
    

volumeManager = VolumeManager(audioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager)

Upvotes: 0

LevoSharp
LevoSharp

Reputation: 39

        val audioManager = requireContext().getSystemService(AudioManager::class.java)

Upvotes: 1

Related Questions