【android开发】如何在安卓app内监听系统媒体音量变化

查了很多资料,发现有两种方式可以在app内监听到系统音量变化:

  • 一种是通过监听系统的按键事件,重载onKeyUp和onKeyDown来完成,缺点是只能在activity中进行监听,业务在fragment会有点难搞。

 

  • 另外一种就是通过ContentObserver进行监听,我写了一个简单的帮助类,使用的时候只需要换掉listener的类型,在需要音量监听的页面调用register(),生命周期结束时调用unregister()即可。
/**
 * 系统音量监听
 *
 * @property context
 * @property listener 自定义listener
 */
class SystemVolumeChangeHelper(val context: Context, val listener: Listener) {

    var observer: SettingsContentObserver? = null
    var mHandler: Handler? = null

    /**
     * register
     */
    fun register() {
        mHandler = Handler()
        observer = SettingsContentObserver(mHandler, context, listener)
        observer?.let {
            context.contentResolver.registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, it)
        }
    }

    /**
     * unregister
     */
    fun unregister() {
        observer?.let {
            context.contentResolver.unregisterContentObserver(it)
        }
        mHandler?.removeCallbacksAndMessages(null)
        mHandler = null
    }
}

/**
 * setting observer
 *
 * @property handler
 * @property context
 * @property listener
 */
class SettingsContentObserver(val handler: Handler?, val context: Context, val listener: Listener) : ContentObserver(handler) {

    private val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager

    override fun onChange(selfChange: Boolean) {
        listener.onSystemVolumeChange(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
        super.onChange(selfChange)
    }
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值