Android实现监听音量的变化

 更新时间:2021年05月10日 15:10:09   作者:蒜蓉香菜老干妈  
这篇文章主要为大家详细介绍了Android实现监听音量的变化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现监听音量变化的具体代码,供大家参考,具体内容如下

最近项目中涉及到了音量监听然后作出改变的需求,特此mark一下

想监听音量的变化通用的就两种方法:

1、监听音量键的变化

方法: 重写 activity onKeyDown函数

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                //音量键up
                return false;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                //音量键down
                return false;
            default:
                break;
        }
        return super.onKeyDown(keyCode, event);
}

优点: 快速,方便,简单

缺点: 

1. 容易消耗音量键改变事件(返回false有时也没用),实测
2. 该监听针对当前Activity,不同的Ac要重新重写onKeyDown函数
3. 由第二点可知,无法做到整个应用范围监听

2、获取音量变化的广播

系统音量变化的时候会发送广播,监听这个就行,音量变化的action是
android.media.VOLUME_CHANGED_ACTION
具体的见代码:(kotlin版本)

class VolumeChangeHelper(var context: Context){

    private var mVolumeBroadCastReceiver: VolumeBroadCastReceiver? = null
    private var mVolumeChangeListener: VolumeChangeListener? = null

    companion object{
        const val  VOLUME_CHANGE_ACTION = "android.media.VOLUME_CHANGED_ACTION"
        const val EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE"
    }

    private var audioManager: AudioManager? =  context.getSystemService(Context.AUDIO_SERVICE) as? AudioManager

    fun registerVolumeChangeListener(volumeChangeListener: VolumeChangeListener){
        mVolumeChangeListener = volumeChangeListener
        mVolumeBroadCastReceiver = VolumeBroadCastReceiver()
        val filter = IntentFilter()
        filter.addAction(VOLUME_CHANGE_ACTION)
        if(mVolumeBroadCastReceiver != null){
            //注册这个广播
            context.registerReceiver(mVolumeBroadCastReceiver!!, filter)
        }
    }

    fun unregisterReceiver(){
        if(mVolumeBroadCastReceiver != null){
            context.unregisterReceiver(mVolumeBroadCastReceiver!!)
            mVolumeBroadCastReceiver = null
        }
    }

    interface VolumeChangeListener{
        fun onVolumeDownToMin()
        fun onVolumeUp()
    }
    
    //定义一个想监听音量变化的广播接受者
    inner class VolumeBroadCastReceiver : BroadcastReceiver(){
        override fun onReceive(context: Context?, intent: Intent?) {
            if(intent?.action == VOLUME_CHANGE_ACTION && intent?.getIntExtra(EXTRA_VOLUME_STREAM_TYPE, -1) == AudioManager.STREAM_MUSIC){
                val currentVolume = audioManager?.getStreamVolume(AudioManager.STREAM_MUSIC) ?: -1
                if(currentVolume > 0){
                    mVolumeChangeListener?.onVolumeUp()
                } else  if( currentVolume == 0){
                    mVolumeChangeListener?.onVolumeDownToMin()
                }
            }
        }

    }
}

想实现全局监听的话,可以在在一个app生命周期内都存在的Context里去监听,比如MainActivity

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android编程实现读取本地SD卡图片的方法

    Android编程实现读取本地SD卡图片的方法

    这篇文章主要介绍了Android编程实现读取本地SD卡图片的方法,涉及Android针对文件读取及判定操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 在Android上实现HttpServer的示例代码

    在Android上实现HttpServer的示例代码

    本篇文章主要介绍了在Android上实现HttpServer的示例代码,实现Android本地的微型服务器,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Android UI实时预览和编写的各种技巧

    Android UI实时预览和编写的各种技巧

    大家好,今天给大家分享的是Android中实时预览UI和编写UI的各种技巧,
    2015-11-11
  • Android应用接入微信分享的实例代码

    Android应用接入微信分享的实例代码

    本篇文章主要介绍了Android应用接入微信分享的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-07-07
  • Android实现截图分享qq 微信功能

    Android实现截图分享qq 微信功能

    在日常生活中,经常用到qq,微信截图分享功能,今天小编通过本文给大家介绍Android实现截图分享qq 微信功能,具体实现代码大家参考下本文
    2017-12-12
  • Android实现图片预览与保存功能

    Android实现图片预览与保存功能

    在App开发中,通常为了省流提高加载速度提升用户体验我们通常在列表中或新闻中的插图都是以缩略图压缩过的图片来进行展示,当用户点击图片时我们再去加载真正像素的大图让用户预览。本文将利用Flutter实现这一功能,需要的可以参考一下
    2022-04-04
  • flutter开发的app项目 打包成web

    flutter开发的app项目 打包成web

    如果你的Flutter版本低于2.0,请先升级Flutter版本,创建一个web文件夹来存放web相关的资源,使用HTML渲染器打包,该渲染器提供的打开速度最快,并且具有良好的浏览器兼容性,使用默认设置进行打包,提供的打开速度为一般,但依然保持良好的浏览器兼容性
    2024-08-08
  • Flutter集成到已有iOS工程的方法步骤

    Flutter集成到已有iOS工程的方法步骤

    这篇文章主要介绍了Flutter集成到已有iOS工程的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Android使用ViewPager完成app引导页

    Android使用ViewPager完成app引导页

    这篇文章主要为大家详细介绍了Android使用ViewPager完成app引导页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Android事件分发机制深入刨析原理及源码

    Android事件分发机制深入刨析原理及源码

    Android 的事件分发机制大体可以分为三部分:事件生产、事件分发 、事件消费。事件的生产是由用户点击屏幕产生,我们这次着重分析事件的分发和消费,因为事件分发和处理联系的过于紧密,这篇文章将把事件的分发和消费放在一起分析
    2023-04-04

最新评论