当前位置:

首页 > 系统应用 > 10.3 AudioManager(音频管理器)

10.3 AudioManager(音频管理器)

本文目录

    本节引言: 在多媒体这一节里,前面已经用SoundPool做过一个“Duang”的小示例:小猪点一下按钮,结果“Duang”地一声突然冒出来,而且音量还特别大,真能把人吓一跳。不过也正因为这个小插曲,声音控制这件事就绕不过去了。既然提到了音量大小,接下来正好看看Android提供的音量控制相关 AP

    本节引言:

    在多媒体这一节里,前面已经用SoundPool做过一个“Duang”的小示例:小猪点一下按钮,结果“Duang”地一声突然冒出来,而且音量还特别大,真能把人吓一跳。不过也正因为这个小插曲,声音控制这件事就绕不过去了。既然提到了音量大小,接下来正好看看Android提供的音量控制相关 API。

    AudioManager(音频管理器)这个类位于Android.Media包下,主要负责音量控制以及铃声模式这类操作。接下来就把它的基本用法捋一遍,顺手也可以写个Demo来练练手。比如做一个简单的静音功能,看小电影之前先打开Demo点一下静音,然后,当然,这里只是开个玩笑。好了,闲话少说,直接进入本节内容。

    官方API文档:AudioManager

    1.获得AudioManager对象实例

    AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

    2.相关方法详解

    常用方法:

    • adjustVolume(int direction, int flags): 控制手机音量,调大或者调小一个单位,根据第一个参数进行判断 AudioManager.ADJUST_LOWER,可调小一个单位; AudioManager.ADJUST_RAISE,可调大一个单位
    • adjustStreamVolume(int streamType, int direction, int flags): 同上,不过可以选择调节的声音类型 1)streamType参数,指定声音类型,有下述几种声音类型: STREAM_ALARM:手机闹铃 STREAM_MUSIC:手机音乐
      STREAM_RING:电话铃声 STREAM_SYSTEAM:手机系统
      STREAM_DTMF:音调 STREAM_NOTIFICATION:系统提示
      STREAM_VOICE_CALL:语音电话 2)第二个参数和上面那个一样,调大或调小音量的 3)可选的标志位,比如AudioManager.FLAG_SHOW_UI,显示进度条,AudioManager.PLAY_SOUND:播放声音
    • setStreamVolume(int streamType, int index, intflags):直接设置音量大小
    • getMode( ):返回当前的音频模式
    • setMode( ):设置声音模式 有下述几种模式: MODE_NORMAL(普通), MODE_RINGTONE(铃声), MODE_IN_CALL(打电话),MODE_IN_COMMUNICATION(通话)
    • getRingerMode( ):返回当前的铃声模式
    • setRingerMode(int streamType):设置铃声模式 有下述几种模式: 如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)
    • getStreamVolume(int streamType): 获得手机的当前音量,最大值为7,最小值为0,当设置为0的时候,会自动调整为震动模式
    • getStreamMaxVolume(int streamType):获得手机某个声音类型的最大音量值
    • setStreamMute(int streamType,boolean state):将手机某个声音类型设置为静音
    • setSpeakerphoneOn(boolean on):设置是否打开扩音器
    • setMicrophoneMute(boolean on):设置是否让麦克风静音
    • isMicrophoneMute():判断麦克风是否静音或是否打开
    • isMusicActive():判断是否有音乐处于活跃状态
    • isWiredHeadsetOn():判断是否插入了耳机

    其他方法:

    • abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放弃音频的焦点
    • adjustSuggestedStreamVolume(int,int suggestedStreamType intflags): 调整最相关的流的音量,或者给定的回退流
    • getParameters(String keys):给音频硬件设置一个varaible数量的参数值
    • getVibrateSetting(int vibrateType):返回是否该用户的振动设置为振动类型
    • isBluetoothA2dpOn():检查是否A2DP蓝牙耳机音频路由是打开或关闭
    • isBluetoothScoA vailableOffCall():显示当前平台是否支持使用SCO的关闭调用用例
    • isBluetoothScoOn():检查通信是否使用蓝牙SCO
    • loadSoundEffects():加载声音效果
    • playSoundEffect((int effectType, float volume):播放声音效果
    • egisterMediaButtonEventReceiver(ComponentName eventReceiver): 注册一个组件MEDIA_BUTTON意图的唯一接收机
    • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 请求音频的焦点
    • setBluetoothScoOn(boolean on):要求使用蓝牙SCO耳机进行通讯
    • startBluetoothSco/stopBluetoothSco()():启动/停止蓝牙SCO音频连接
    • unloadSoundEffects():卸载音效

    3.使用示例

    嘿嘿,属性蛮多的,有些还涉及到蓝牙这些东东,这里我们只讲解最常见的一些方法!

    遇到一些特殊的没见过的,我们再来查文档!

    简单的示例:使用Mediaplayer播放音乐,通过AudioManager调节音量大小与静音!

    对了,先在res下创建一个raw的文件夹,往里面丢一个MP3资源文件!

    运行效果图:

    代码实现:

    布局代码activity_main.xml:

    
    

    MainActivity.ja va:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_start;
        private Button btn_stop;
        private Button btn_higher;
        private Button btn_lower;
        private Button btn_quite;
        private MediaPlayer mePlayer;
        private AudioManager aManager;
        //定义一个标志用来标示是否点击了静音按钮
        private int flag = 1;
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            //获得系统的音频对象
            aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
            //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
            mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
            //设置循环播放:
            mePlayer.setLooping(true);
            bindViews();
        }
    private void bindViews() {
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_stop = (Button) findViewById(R.id.btn_stop);
            btn_higher = (Button) findViewById(R.id.btn_higher);
            btn_lower = (Button) findViewById(R.id.btn_lower);
            btn_quite = (Button) findViewById(R.id.btn_quite);
    btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
            btn_higher.setOnClickListener(this);
            btn_lower.setOnClickListener(this);
            btn_quite.setOnClickListener(this);
        }
    @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_start:
                    btn_stop.setEnabled(true);
                    mePlayer.start();
                    btn_start.setEnabled(false);
                    break;
                case R.id.btn_stop:
                    btn_start.setEnabled(true);
                    mePlayer.pause();
                    btn_stop.setEnabled(false);
                    break;
                case R.id.btn_higher:
                    // 指定调节音乐的音频,增大音量,而且显示音量图形示意
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                    break;
                case R.id.btn_lower:
                    // 指定调节音乐的音频,降低音量,只有声音,不显示图形条
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
                    break;
                case R.id.btn_quite:
                    // 指定调节音乐的音频,根据isChecked确定是否需要静音
                    flag *= -1;
                    if (flag == -1) {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);   //API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
    //                            AudioManager.FLAG_SHOW_UI);   //23以后的版本用这个
                        btn_quite.setText("取消静音");
                    } else {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
    //                            AudioManager.FLAG_SHOW_UI);  //23以后的版本用这个
                        aManager.setMicrophoneMute(false);
                        btn_quite.setText("静音");
                    }
                    break;
            }
        }
    }

    代码还是非常简单的,另外设置静音的方法setStreamMute()在API 23版本过期, 可以使用另一个方法adjustStreamVolume(int, int, int),然后第三个属性设置:

    ADJUST_MUTE 或 ADJUST_UNMUTE!

    对了,还有:

    如果adjustStreamVolume()的第三个参数你设置了振动(Vibrator), 需要在AndroidManifest.xml中添加这个权限哦!

    <**uses-permission android:name="android.permission.VIBRATE"**/>

    本节小结:

    好的,本节给大家演示了AudioManager用于调节音量的一个简单用法,这个类笔者也不常用 到,以后如果有什么新get的技能再加上吧~嘿嘿,静音Demo写好没?要结合实际需求哈~

    另外,本周博客可能不会更新得太频繁,本周要把公司的WebSocket库替换掉,有得头痛了~ 好的,就说这么多,谢谢~

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用
    相关文章 更多
    docker容器自动重启怎么解决 排查原因与修复方法
    docker容器自动重启怎么解决 排查原因与修复方法

    遇到Docker容器频繁自动重启?本文提供从查看容器日志、解读退出代码到配置Restart Policy的完整排查与修复方案,确保服务稳定性。

    Linux设置静态路由命令与永久生效教程
    Linux设置静态路由命令与永久生效教程

    学习如何在Linux中使用命令行添加临时静态路由,并通过修改网络配置文件实现重启后依然有效的永久静态路由设置,涵盖CentOS和Ubuntu的不同配置方法。

    摄像头连接电脑后怎么打开查看实时画面教程
    摄像头连接电脑后怎么打开查看实时画面教程

    摄像头连接电脑后不知如何查看画面?本教程演示如何使用Windows自带的“相机”应用快速调取实时视频流,无需下载额外软件,步骤简单直观,适用于大多数USB及内置摄像头。

    如何在 windows 11 关闭自动关机
    如何在 windows 11 关闭自动关机

    针对 Windows 11 电脑在无人操作时自动关机或重启的问题,本文详解如何通过任务计划程序禁用更新重启任务,并调整电源睡眠策略,从根源解决非预期的自动关机现象。

    电脑摄像头怎么测试人脸识别功能及效果判断方法
    电脑摄像头怎么测试人脸识别功能及效果判断方法

    详细讲解在Windows电脑上测试摄像头人脸识别功能的步骤,包括开启Windows Hello、录入面部数据、不同环境下的效果验证及常见问题排查,帮助用户确认设备兼容性与识别准确率。

    docker 容器无法启动的配置检查命令及排查方法
    docker 容器无法启动的配置检查命令及排查方法

    当 Docker 容器启动后立即退出时,不要盲目重启。本文详解如何通过 docker logs 查看标准输出错误,利用 docker inspect 检查挂载与网络配置,并修正入口点脚本权限问题,提供一套高效的因果排查流程。

    安卓手机投屏到电脑win10怎么设置教程
    安卓手机投屏到电脑win10怎么设置教程

    详解如何利用Windows 10自带功能将安卓手机画面投射至电脑屏幕,涵盖开启步骤、连接技巧及延迟分析,适合临时演示与多屏协作场景。

    移动硬盘解除加密怎么操作?详细步骤教程
    移动硬盘解除加密怎么操作?详细步骤教程

    详细介绍如何在Windows系统中为移动硬盘解除BitLocker加密,包括解锁驱动器、关闭加密功能及监控解密进度的完整操作流程,帮助用户安全移除数据保护。

    笔记本电脑耳机没声音怎么设置?Windows 10解决方法
    笔记本电脑耳机没声音怎么设置?Windows 10解决方法

    本文详解Windows 10笔记本耳机无声音的常见原因与解决方法,涵盖物理接口检查、默认播放设备切换、驱动程序更新及音频增强关闭等操作,并分析蓝牙耳机连接异常的例外场景。

    sata固态硬盘安装win10系统怎么分区详细教程
    sata固态硬盘安装win10系统怎么分区详细教程

    还在为SATA固态硬盘装Win10怎么分区头疼?本教程详解安装过程中的分区步骤,涵盖4K对齐检查、ESP引导分区处理及容量规划建议,助你一次性搞定系统盘,避免后期卡顿与空间浪费。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。