Reputation: 21
I am currently implementing a custom audio manager in my Android application to listen for volume changes using AudioManager
and a BroadcastReceiver
for the action android.media.VOLUME_CHANGED_ACTION
. However, I can't detect when the user continues to press the volume-up button after reaching the maximum volume.
Here is my implementation:
class OHAudioManagerImpl @Inject constructor(private val serviceProvider: EnvironmentServiceProvider) : OHAudioManager {
private val context = serviceProvider.providerApplication().applicationContext
private val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
private var currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
private var isMuted = audioManager.isStreamMute(AudioManager.STREAM_MUSIC)
private var listener: AudioChangeListener? = null
val keyVolumeChangedAction = "android.media.VOLUME_CHANGED_ACTION"
private val volumeChangeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == keyVolumeChangedAction) {
handleVolumeChange()
}
}
}
override fun onVolumeChangeListener(listener: AudioChangeListener?) {
this.listener = listener
}
override fun register() {
val filter = IntentFilter(keyVolumeChangedAction)
context.registerReceiver(volumeChangeReceiver, filter)
}
override fun unregister() {
context.unregisterReceiver(volumeChangeReceiver)
}
private fun handleVolumeChange() {
val newVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
val newMuteState = audioManager.isStreamMute(AudioManager.STREAM_MUSIC)
if (newMuteState != isMuted) {
isMuted = newMuteState
listener?.onVolumeChanged(if (isMuted) OHAudioChangeState.Mute else OHAudioChangeState.UnMute)
}
when {
newVolume > currentVolume -> {
listener?.onVolumeChanged(OHAudioChangeState.VolumeUp)
}
newVolume < currentVolume -> {
listener?.onVolumeChanged(OHAudioChangeState.VolumeDown)
}
}
currentVolume = newVolume
}
}
The problem is that I can only detect volume changes when the volume level changes. When the user presses the volume-up button while the volume is already at its maximum, no additional events are triggered.
I want to detect when the user continues pressing the volume-up button after the volume has already reached its maximum level.
Is there any workaround or alternative approach, thanks everyone.
Upvotes: 1
Views: 33