对于Android的音量调节,可以分为按键调节音量和设置中调节音量。我们首先说一说设置中的音量调节。

一、音量的分类:

1.AudioManager.STREAM_VOICE_CALL

2.AudioManager.STREAM_RING

3.AudioManager.STREAM_MUSIC,

4.AudioManager.STREAM_ALARM

5.AudioManager.STREAM_NOTIFICATION

二、音量的范围:

对于不同类型的音量Android规定了不同的范围,在AudioService中有一个数组,定义了不同音量的范围。

private final 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
};

三:调节音量的方法:

int streamValue = am.getStreamVolume(streamType); 获取当前类型的音量值

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 获取音频服务

audioManager.setStreamVolume(mStreamType, streamValue, 0);  设置音量

现在说一下使用按键调节音量

使用按键调节音量,首先会在PhoneWinManager中收到一个按键的事件,然后调用AudioService中的adjustStreamVolume方法,源码如下:

/**
* Tell the audio service to adjust the volume appropriate to the event.
* @param keycode
*/
void handleVolumeKey(int stream, int keycode) {
IAudioService audioService = getAudioService();
if (audioService == null) {
return;
}
try {
// since audio is playing, we shouldn't have to hold a wake lock
// during the call, but we do it as a precaution for the rare possibility
// that the music stops right before we call this
// TODO: Actually handle MUTE.
mBroadcastWakeLock.acquire();
audioService.adjustStreamVolume(stream,
keycode == KeyEvent.KEYCODE_VOLUME_UP
? AudioManager.ADJUST_RAISE
: AudioManager.ADJUST_LOWER,
0);
} catch (RemoteException e) {
Log.w(TAG, "IAudioService.adjustStreamVolume() threw RemoteException " + e);
} finally {
mBroadcastWakeLock.release();
}
}

在adjustStreamVolume会启动VolumePanel,也就是我们按音量键出现的界面。在VolumePanel中会调用AudioManager的setStreamVolume进行设置音量。

Android 音量调节的更多相关文章

  1. 基于鸿洋博客自定于View实现的android音量调节控件

    1.在values建立attrs.xml,写出你需要的属性: <?xml version="1.0" encoding="utf-8"?> < ...

  2. Android 4.4 音量调节流程分析(二)

    之前在Android 4.4 音量调节流程分析(一)里已经有简单的分析音量控制的流程,今天想接着继续分析下音量大小计算的方法.对于任一播放文件而言其本身都有着固定大小的音量Volume_Max,而在A ...

  3. Android 4.4 音量调节流程分析(一)

    最近在做Android Audio方面的工作,有需求是在调节Volume_Up_Key & Volume_Down_key时,Spearker or Headset每音阶的衰减变为3db左右. ...

  4. Android、iOS平台RTMP/RTSP播放器实时音量调节

    介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...

  5. Android6.0 源码修改之Settings音量调节界面增加通话音量调节

    前言 今天客户提了个需求,因为我们的设备在正常情况下无法调节通话音量,只有在打电话过程中,按物理音量加减键才能出现调节通话音量seekBar,很不方便,于是乎需求就来了.需要优化两个地方 1.在正常情 ...

  6. Android 亮度调节

    最近在做一个App的设置项,亮度调节.真正做时,发现Android亮度调节比预想要复杂一些.其实目前网上已有不少这方面的资料,但有些博文具有一定误导性.在此将这块内容按照自己理解整理一下. 整体上看, ...

  7. bzoj-2748 2748: [HAOI2012]音量调节(dp)

    题目链接: 2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MB Description 一个吉他手准备参加一场演出.他不喜欢在演出 ...

  8. BZOJ-2748 音量调节 DP+背包(脑残)

    水DP,一开始竟然想错了...水了半天....真可怕 2748: [HAOI2012]音量调节 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1156 ...

  9. 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题

    一. 先上干货 解决问题 1.1 安装工具alsa-tools-gui sudo apt-get install alsa-tools-gui 1.2 通过hdajackretask设置 直接执行命令 ...

随机推荐

  1. inline-block 兼容性

    inline-block 兼容性 通常网页模板都需要动态添加或删除内容,在做网页导航的时候,需要nav中的ul能够居中并实现自适应拓展,如果ul是固定的长度很好实现居中,只需要设置margin:0 a ...

  2. dbflow 批量 增删查改

    @ModelContainer @Table(database = DemoDatabase.class) class Person extends BaseModel implements Seri ...

  3. ZeroMQ接口函数之 :zmq_msg_close – 释放一个ZMQ消息

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_msg_close zmq_msg_close(3)            ØMQ Manual - ØMQ/3. ...

  4. Eclipse中的文件导航插件StartExplorer

    在Eclipse里面,想找到文件的位置是件麻烦的事,需要借助插件,我用的是StartExplorer插件. StartExplorer官方地址:http://startexplorer.sourcef ...

  5. uva10375 Choose and Divide(唯一分解定理)

    uva10375 Choose and Divide(唯一分解定理) 题意: 已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s ...

  6. ImageLoader

    配置ImageLoader 一般我们在使用ImageLoader的时候,需要在应用程序的入口进行它的一个配置,这个配置一般写到Application里边 * public void initImage ...

  7. Google 云计算中的 GFS 体系结构

          google 公司的很多业务具有数据量巨大的特点,为此,google 公司研发了云计算技术.google 云计 算结构中的 google 文件系统是其云计算技术中的三大法宝之一.本文主要介 ...

  8. java内置工具

    jps jps -l :列出java进程 jstat jstat -gcutil pid:列出各个内存区的使用情况,百分比 jinfo jinfo -flags pid : 列出虚拟机设置,包括默认值 ...

  9. Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法

    在安装thrift的时候,解压包进入目录,执行命令: ./configure 之后,发现某些包没有安装,导致configure到一半的时候退出,接着make发现没有makefile文件.估计是我系统安 ...

  10. webrtc初识

    最近由于项目的需求,开始接触了webrtc这个东西.没想到这东西的门槛还是蛮高的,接下来分享一下我所踩过的坑,希望对以后初次接触这个东西的人有所帮助. webrtc官网 第一步当然是看官方主页了(ww ...