AudioManager 上下文,Android Kotlin 片段

问题描述 投票:0回答:2

如何在 Fragment 中创建 AudioManager ?我用这个,但不起作用。

val audioManager: AudioManager = getSystemService(AUDIO_SERVICE) as AudioManager

谢谢大家!

android kotlin
2个回答
1
投票
        val audioManager = requireContext().getSystemService(AudioManager::class.java)

0
投票

这个问题已经3年了,但我希望它可以帮助有同样问题的人。

首先,创建一个名为 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
    }
}

并在你的片段上调用它

private lateinit var volumeManager: VolumeManager
    

volumeManager = VolumeManager(audioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager)
© www.soinside.com 2019 - 2024. All rights reserved.