文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在Android中监听音量的变化

2023-06-15 00:41

关注

这篇文章给大家介绍如何在Android中监听音量的变化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

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);}

优点: 快速,方便,简单

缺点: 

容易消耗音量键改变事件(返回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()                }            }        }    }}

关于如何在Android中监听音量的变化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯