Android音量调节(一)音量键的处理流程

1.Android音量键调节音量流程

整个流程分析是基于Android 8.0来进行讲解的

2.Android流定义

在Android系统中,音量都是分开控制的,比如媒体音量,铃声音量,闹钟音量,蓝牙音量,通话音量都是分开控制的。各种音量都是通过音频流来区别不同音量类型的。在Android 8.0里面,一共定义了11种流的类型,每种流类型都定义了最大音量(MAX_STREAM_VOLUME),最小音量(MIN_STREAM_VOLUME),以及默认音量(DEFAULT_STREAM_VOLUME),细心的童鞋可能会发现,我们能调节的音量类型,也就5种。所以还存在一个流的映射关系,然后这个流就可以使用另外一个流的音量了。

  • 最大音量
-frameworks/base/services/core/java/com/android/server/audio/AudioService.java

   /** Maximum volume index values for audio streams */
    private static int[] MAX_STREAM_VOLUME = new int[] {
        5,  // STREAM_VOICE_CALL
        7,  // STREAM_SYSTEM
        7,  // STREAM_RING
        15, // STREAM_MUSIC
        7,  // STREAM_ALARM
        7,  // STREAM_NOTIFICATION
        15, // STREAM_BLUETOOTH_SCO
        7,  // STREAM_SYSTEM_ENFORCED
        15, // STREAM_DTMF
        15, // STREAM_TTS
        15  // STREAM_ACCESSIBILITY
    };
复制代码
  • 最小音量
-frameworks/base/services/core/java/com/android/server/audio/AudioService.java

    /** Minimum volume index values for audio streams */
    private static int[] MIN_STREAM_VOLUME = new int[] {
        1, // STREAM_VOICE_CALL
        0, // STREAM_SYSTEM
        0, // STREAM_RING
        0, // STREAM_MUSIC
        0, // STREAM_ALARM
        0, // STREAM_NOTIFICATION
        0, // STREAM_BLUETOOTH_SCO
        0, // STREAM_SYSTEM_ENFORCED
        0, // STREAM_DTMF
        0, // STREAM_TTS
        0  // STREAM_ACCESSIBILITY
    };
复制代码
  • 默认音量
-frameworks/base/media/java/android/media/AudioSystem.java

    public static int[] DEFAULT_STREAM_VOLUME = new int[] {
        4, // STREAM_VOICE_CALL
        7, // STREAM_SYSTEM
        5, // STREAM_RING
        5, // STREAM_MUSIC
        6, // STREAM_ALARM
        5, // STREAM_NOTIFICATION
        7, // STREAM_BLUETOOTH_SCO
        7, // STREAM_SYSTEM_ENFORCED
        5, // STREAM_DTMF
        5, // STREAM_TTS
        5  // STREAM_ACCESSIBILITY
    };
复制代码
  • 音频流映射 在Android系统中,不同设备的映射不尽相同,一共定义了三种设备的音频流的映射,分别是VOICE(STREAM_VOLUME_ALIAS_VOICE),TELEVISION(STREAM_VOLUME_ALIAS_TELEVISION),DEFAULT(STREAM_VOLUME_ALIAS_DEFAULT)。

    • VOICE(STREAM_VOLUME_ALIAS_VOICE),voice表示具有语音功能的设备,比如电话
    -frameworks/base/services/core/java/com/android/server/audio/AudioService.java
    
        private final int[] STREAM_VOLUME_ALIAS_VOICE = new int[] {
            AudioSystem.STREAM_VOICE_CALL,       // STREAM_VOICE_CALL
            AudioSystem.STREAM_RING,             // STREAM_SYSTEM
            AudioSystem.STREAM_RING,             // STREAM_RING
            AudioSystem.STREAM_MUSIC,            // STREAM_MUSIC
            AudioSystem.STREAM_ALARM,            // STREAM_ALARM
            AudioSystem.STREAM_RING,             // STREAM_NOTIFICATION
            AudioSystem.STREAM_BLUETOOTH_SCO,    // STREAM_BLUETOOTH_SCO
            AudioSystem.STREAM_RING,             // STREAM_SYSTEM_ENFORCED
            AudioSystem.STREAM_RING,             // STREAM_DTMF
            AudioSystem.STREAM_MUSIC,            // STREAM_TTS
            AudioSystem.STREAM_MUSIC             // STREAM_ACCESSIBILITY
        };
    复制代码
    • TELEVISION(STREAM_VOLUME_ALIAS_TELEVISION),television对应电视或者机顶盒
    -frameworks/base/services/core/java/com/android/server/audio/AudioService.java
    
        private final int[] STREAM_VOLUME_ALIAS_TELEVISION = new int[] {
            AudioSystem.STREAM_MUSIC,      // STREAM_VOICE_CALL
            AudioSystem.STREAM_MUSIC,      // STREAM_SYSTEM
            AudioSystem.STREAM_MUSIC,      // STREAM_RING
            AudioSystem.STREAM_MUSIC,      // STREAM_MUSIC
            AudioSystem.STREAM_MUSIC,      // STREAM_ALARM
            AudioSystem.STREAM_MUSIC,      // STREAM_NOTIFICATION
            AudioSystem.STREAM_MUSIC,      // STREAM_BLUETOOTH_SCO
            AudioSystem.STREAM_MUSIC,      // STREAM_SYSTEM_ENFORCED
            AudioSystem.STREAM_MUSIC,      // STREAM_DTMF
            AudioSystem.STREAM_MUSIC,      // STREAM_TTS
            AudioSystem.STREAM_MUSIC       // STREAM_ACCESSIBILITY
        };
    复制代码
    • DEFAULT(STREAM_VOLUME_ALIAS_DEFAULT),default表示平板之类的设备
    -frameworks/base/services/core/java/com/android/server/audio/AudioService.java
    
        private final int[] STREAM_VOLUME_ALIAS_DEFAULT = new int[] {
            AudioSystem.STREAM_VOICE_CALL,      // STREAM_VOICE_CALL
            AudioSystem.STREAM_RING,            // STREAM_SYSTEM
            AudioSystem.STREAM_RING,            // STREAM_RING
            AudioSystem.STREAM_MUSIC,           // STREAM_MUSIC
            AudioSystem.STREAM_ALARM,           // STREAM_ALARM
            AudioSystem.STREAM_RING,            // STREAM_NOTIFICATION
            AudioSystem.STREAM_BLUETOOTH_SCO,   // STREAM_BLUETOOTH_SCO
            AudioSystem.STREAM_RING,            // STREAM_SYSTEM_ENFORCED
            AudioSystem.STREAM_RING,            // STREAM_DTMF
            AudioSystem.STREAM_MUSIC,           // STREAM_TTS
            AudioSystem.STREAM_MUSIC            // STREAM_ACCESSIBILITY
        };
    复制代码
    • 映射关系如下
    流序号 流类型 最大音量 最小音量 默认音量 VOICE/DEFAULT TELEVISION
    0 STREAM_VOICE_CALL 5 1 4 STREAM_VOICE_CALL STREAM_MUSIC
    1 STREAM_SYSTEM 7 0 7 STREAM_RING STREAM_MUSIC
    2 STREAM_RING 7 0 5 STREAM_RING STREAM_MUSIC
    3 STREAM_MUSIC 15 0 5 STREAM_MUSIC STREAM_MUSIC
    4 STREAM_ALARM 7 0 6 STREAM_ALARM STREAM_MUSIC
    5 STREAM_NOTIFICATION 7 0 5 STREAM_RING STREAM_MUSIC
    6 STREAM_BLUETOOTH_SCO 15 0 7 STREAM_BLUETOOTH_SCO STREAM_MUSIC
    7 STREAM_SYSTEM_ENFORCED 7 0 7 STREAM_RING STREAM_MUSIC
    8 STREAM_DTMF 15 0 5 STREAM_RING STREAM_MUSIC
    9 STREAM_TTS 15 0 5 STREAM_MUSIC STREAM_MUSIC
    10 STREAM_ACCESSIBILITY 15 0 5 STREAM_MUSIC STREAM_MUSIC

    通过上表,可以很明显的看到,在手机和平板上面

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android操作系统提供了丰富的音量调节功能,使用户可以根据自己的需求和环境来调节设备的音量。 首先,用户可以通过音量按钮来快速调节设备的音量。通过按下设备的音量上下按钮,可以分别提高或降低音量。这种方式非常方便,用户可以根据需要快速调整音量大小。 除了音量按钮,用户还可以通过系统设置来进一步调节音量。用户可以打开“设置”应用,找到“声音”或“音量”选项。在该选项中,用户可以分别设置媒体、通知、来电、闹钟等不同的音量,并使用滑块来调整音量的大小。 另外,Android还提供了快捷菜单来调节音量。用户可以从屏幕顶部或底部向上或向下滑动,从而打开快捷菜单。在该菜单中,用户可以找到音量控制选项,并通过滑块来调整音量大小。这种方式比较便捷,用户可以在任何应用中快速调节音量,而无需进入设置。 最后,有些应用还提供了自定义音量调节功能。例如,音乐播放器应用通常会提供独立的音量控制,用户可以在应用内部调整音量,而不影响其他应用的音量设置。这种方式适用于一些需要专注调整音乐或媒体音量的场景。 总之,Android提供了多种方法来调节音量,包括通过音量按钮、系统设置、快捷菜单和应用自定义等方式。用户可以根据需要和偏好自由地调整设备的音量大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值