AudioManager:音量调节

QuibblerQuibbler 2020-01-12 约 8 分钟 1775 次阅读

AudioManager顾名思义,音频管理器,是Android中定义的类,方便我们设置手机中的各种音频。如多媒体音量获取和调节、设置铃声等。

获取AudioManager实例,调用Context中的方法:

AudioManager mManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

AUDIO_SERVICE获取AudioManager对象,该静态变量在Context中的定义如下。Context中还定义很多其它类型参数,这里不再详述。

/**
     * 与 {@link #getSystemService(String)} 一起使用
     * 获取{@link android.media.AudioManager}对象
     * 用于处理音量,铃声模式和音频路由的管理。
     *
     * @see #getSystemService(String)
     * @see android.media.AudioManager
     */
    public static final String AUDIO_SERVICE = "audio";

AudioManager类中定义了丰富的API,控制手机的各种音频。介绍一下常用的API和预定义的参数。

首先需要了解手机中有六类铃声:通话音、系统音、铃音、媒体音、闹钟音、通知音。这6种type铃声类型定义在AudioManager类中:

/** 通话音 */
    public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
    
    /** 系统 */
    public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
    
    /** 铃音 */
    public static final int STREAM_RING = AudioSystem.STREAM_RING;
    
    /** 媒体音 */
    public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
    
    /** 闹钟音 */
    public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
    
    /** 通知音 */
    public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;

①获取指定类型铃声的最大音量

mManager.getStreamMaxVolume(type)

②获取指定类型铃声的当前音量

mManager.getStreamVolume(type)

③获取指定类型铃声的响铃模式

mManager.getRingerMode()

响铃模式有三种类型,也定义在AudioManager中:

/**
     * 静音
     */
    public static final int RINGER_MODE_SILENT = 0;
    /**
     * 震动
     */
    public static final int RINGER_MODE_VIBRATE = 1;
    /**
     * 正常
     */
    public static final int RINGER_MODE_NORMAL = 2;

④设置指定类型铃声的响铃模式

mManager.setRingerMode(type)

⑤setStreamVolume设置指定铃声的当前音量,设定具体数值

mManager.setStreamVolume(int streamType, int index, int flags)

第一个参数streamType就是前面说到的6中铃声类型,第二个就是音量的数值。第三个flags表示调整音量过程中的附加动作,举个例子,更多可以去AudioManager中查看所有定义的flags:

/**
     * 显示进度条
     */
    public static final int FLAG_SHOW_UI = 1 << 0;
    /**
     * 更改音量时是否包括铃声模式作为可能的选项。
     */
    public static final int FLAG_ALLOW_RINGER_MODES = 1 << 1;
    /**
     * 播放声音
     */
    public static final int FLAG_PLAY_SOUND = 1 << 2;

⑥adjustStreamVolume调整指定类型铃声的音量,不是设置具体的数值

mManager.adjustStreamVolume(int streamType, int direction, int flag

第一个参数是铃声的类型,第二个参数是调整的策略,定义音量调整方向

/**
     * 调大一级音量
     */
    public static final int ADJUST_RAISE = 1;
    /**
     * 降低一级音量
     */
    public static final int ADJUST_LOWER = -1;
    /**
     *音量保持不变
     */
    public static final int ADJUST_SAME = 0;
    /**
     * 静音
     */
    public static final int ADJUST_MUTE = -100;
    /**
     * 取消静音
     */
    public static final int ADJUST_UNMUTE = 100;
    /**
     * 原来不是静音=>静音;原来是静音=>静音
     */
    public static final int ADJUST_TOGGLE_MUTE = 101;

与adjustStreamVolume方法有一个相似的方法adjustVolume,少了第一个参数,不需要设定具体的铃声类型,设定默认类型的铃声:

adjustVolume(int direction, int flags)

Demo:

参考博客:

        《Android Manager之AudioManager(音频管理器)》

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w