android音量控制流程
Android 小项目之--使用【AudioManager】类控制音量
Android 小项目之--使用【AudioManager】类控制音量一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。
一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。
本篇基于 Android API 中的 AudioManager 作讲述,使看过本篇的读者可以迅速的掌握这个类的实现过程。
下面是本篇大纲:∙1、认识 AudioManager∙2、AudioManager 主要方法介绍∙3、程序逻辑实现过程1、认识 AudioManagerAudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作。
2、AudioManager 主要方法介绍邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:∙方法:adjustVolume(int direction, int flags)解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
∙方法:getMode()解释:返回当前音频模式。
∙方法:getRingerMode()解释:返回当前的铃声模式。
∙方法:getStreamVolume(int streamType)解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。
∙方法:setRingerMode(int ringerMode)解释:改变铃声模式3、程序逻辑实现过程界面上设置了一个图片,表示当前铃声状态,一个进度条表示当前音量大小,五个图片按钮,用来表示增加/减小音量、普通模式、静音模式和震动模式。
下面是界面的 XML 布局代码:<?xml version="1.0" encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/layout1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/white"xmlns:android="/res/android"><TextViewandroid:id="@+id/myText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_text1"android:textSize="16sp"android:textColor="@drawable/black"android:layout_x="20px"android:layout_y="42px"></TextView><ImageViewandroid:id="@+id/myImage"android:layout_width="48px"android:layout_height="48px"android:layout_x="110px"android:layout_y="32px"></ImageView><TextViewandroid:id="@+id/myText2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_text2"android:textSize="16sp"android:textColor="@drawable/black"android:layout_x="20px"android:layout_y="102px"></TextView><ProgressBarandroid:id="@+id/myProgress"style="?android:attr/progressBarStyleHorizontal" android:layout_width="160dip"android:layout_height="wrap_content"android:max="7"android:progress="5"android:layout_x="110px"android:layout_y="102px"></ProgressBar><ImageButtonandroid:id="@+id/downButton" android:layout_width="100px" android:layout_height="100px" android:layout_x="50px"android:layout_y="162px"android:src="@drawable/down" ></ImageButton><ImageButtonandroid:id="@+id/upButton"android:layout_width="100px" android:layout_height="100px" android:layout_x="150px"android:layout_y="162px"android:src="@drawable/up"></ImageButton><ImageButtonandroid:id="@+id/normalButton" android:layout_width="60px"android:layout_height="60px" android:layout_x="50px"android:layout_y="272px"android:src="@drawable/normal" ></ImageButton><ImageButtonandroid:id="@+id/muteButton" android:layout_width="60px"android:layout_height="60px" android:layout_x="120px"android:layout_y="272px"android:src="@drawable/mute" ></ImageButton><ImageButtonandroid:id="@+id/vibrateButton"android:layout_width="60px"android:layout_height="60px"android:layout_x="190px"android:layout_y="272px"android:src="@drawable/vibrate"></ImageButton></AbsoluteLayout>程序类分别为:1、viewHolder界面上的所有控件和元素都在这里静态声明package com.terry;import ;import ;import ;import ;public class viewHolder {public static ImageButton downButton;public static ImageButton upButton;public static ImageButton normalButton;public static ImageButton muteButton;public static ImageButton vibrateButton;public static ProgressBar myProgressBar;public static ImageView myImageView;public static AudioManager audiomanage;}2、AudioManagerActivity程序入口处,和主要逻辑代码的处理,程序开头以(AudioManager)getSystemService(AUDIO_SERVICE); 取得 AudioManager 对象。
关于音量调节说明
关于音量调节
RK 郑应航
1.RK平台上一般硬件音量最大与最小已设为最大增益与静音。
2.Android的音量调节主要依靠软件实现,具体可以看:
/hardware/rk29/audio/AudioPolicyManagerBase.cpp的computeVolume函数,该函数基本原理
3.就是每种音频设备会对应一条音量曲线,按照一定数学关系来选择具体增益。
4.一般客户有要求调节低音量时增益范围,可以看下图中的数组,因为每条音量曲线是根据下图数组算出来的,因此改变数组值即可改变音量曲线。
下图数组的意思是每条曲线有一个大数组,大数据内包含4个小数组,小数组第一个值代表1~100的某个值(音量被量化成100),第二个值代表增益(dB),如下图第一条曲线:
1:-49.5dB(衰减49.5dB输出)100:0dB(无衰减输出)
客户可根据自己需要来改变数组值,具体是哪条曲线需要客户自己去根据名字对应。
如:33:-33.5f可改为-22.5之类的,可以提高1~33之间音量步进值。
安卓手机音量增大或者减小方法doc
手机音量太小解决办法进入移动叔叔工具-工程模式MTK,--> Audio--> Normal Mode--> Sph--> Level 0-6 设置不同的数值,数值设好按Set,Level 0-6是从静音到最大的梯级。
如Level 0=0;Level 1=90;Level 2=108;Level 3=116;Level 4=130;Level 5=140;Level 6=155。
最大值为160,最小为0静音。
如果设置到最大值,听筒有破音时,最好调小点。
其中Normal Mode 普通模式,Headset Mode 耳机模式,LoudSpeaker Mode 免提模式。
最常用的两种方法:1,拨号界面下输入*#*#3646633#*#*2,下个移动他叔叔的软件(简称移动叔叔),用移动叔叔进工程模式选择的是工程模式(MTK)。
首先电话拨号输入:*#*#3646633#*#*进入工程模式。
1,听筒音量调正方法:选择AUDIO----->NORMAL MODE,关掉输入法窗口,就看到下面的值了。
NORMAL MODE跟LoudSpeaker Mode的值要求调一样。
选择Audio,然后选择LoudSpeaker,选择"type"里面的SPH,现在开始设定几个LEVEL的值。
自己填好数字后,点击SET就好了。
无需重启手机就生效了,分别如下:LEVEL 0------ VALUE 0 SETLEVEL 1-------VALUE 48 SETLEVEL 2-------VALUE 96 SETLEVEL 3-------VALUE 112 SETLEVEL 4-------VALUE 128 SETLEVEL 5-------VALUE 148 SETLEVEL 6-------VALUE 160 SET具体数字自己在范围内添加,只要音量增减平顺就好。
2,铃声音量调正方法:选择AUDIO----->NORMAL MODE,关掉输入法窗口,就看到下面的值了。
安卓MTK类手机进入工程模式调整音量
LEVEL 4-------VALUE 120 SET
LEVEL 5-------VALUE 140 SET
LEVEL 6-------VALUE 160 SET
**------------
话筒音量调节方法:
打开"移动叔叔工具箱" ,进入工程模式,选择AUDIO可以看到NORMAL MODE和LoudSpeaker两个数值!两个数值都调整一样就好了
LEVEL 1-------VALUE 200 SET
LEVEL 2-------VALUE 200 SET
LEVEL 3-----ห้องสมุดไป่ตู้-VALUE 200 SET
LEVEL 4-------VALUE 200 SET
LEVEL 5-------VALUE 200 SET
LEVEL 6-------VALUE 200 SET
按电话键
*#*#3646633#*#*
就进入就是工程模式了,也可以通过打开"移动叔叔工具箱",进入工程模式.
至此,该界面下的操作就请慎重了,有可能变砖的啊,变砖了,请直接刷.
Normal mode(正常模式)--(调节听筒发音量),
loudsp mode(喇叭模式)--(调节喇叭发音量),
headset mode(耳机模式)--(调节使用耳机的发音量)
```````````````````````````````````````````````````````````````````
听筒音量调节方法:
进入工程模式,选择AUDIO可以看到NORMAL MODE和LoudSpeaker两个数值!两个数值都调整一样就好了
【Android开发Wiki】进阶篇音频管理(一):控制应用程序音量和播放
原文链接:/training/managing-audio/volume-playback.html好的用户体验是可预知的。
如果您的应用能够播放媒体文件,让用户使用硬件或者软件设备、蓝牙耳机、手机来控制音量是非常重要的。
同样,在适当和有效的应用使用的音频流上、播放、停止、暂停、快进和快退媒体录放控制按键需要执行各自的动作。
确认使用的是哪个音频流创建可预知的音频体验第一步是理解应用使用的音频流。
Android为播放音乐、警报、通知、电话铃声、系统声音、通话音量、双音多频音维护了单独的音频流。
首先允许用户控制每个单独流的音量。
大部分的流被系统消息限制,除非您的应用是警告铃声,大部分时候使用STREAM_MUSIC流来播放音频。
使用硬件音量键控制应用音频音量默认情况下,按音量控制键会改变实际的音频流的音量。
如果您的应用当前没有播放任何东西、按音量键会调整电话音量。
如果你有个游戏或者音乐应用,尽管当前在歌曲连接处和当前游戏中没有声音,当用户按音量键控制游戏或者音乐的音量也是可以的。
或许你会用这个方法进行尝试、听取音量按键按下和修改音频流音量。
抵制这个强烈要求。
Android 提供了便利的setVolumeControlStrea m()方法让音量按键直接处理你指定的音频流。
确定了应用使用的音频流之后,需要将音频流设置为音量流目标。
在应用生命周期中应该尽早调用--因为您只需要在activity生命周期中调用一次,最典型的是onCreate()方法中调用(在Activity或控制媒体的Fragment).这保证了不管应用是否可见,音量控制功能仍然像用户期待的。
使用硬件播放键来控制音频播放在许多手机,有线和无线耳机上都有媒体播放按键,如播放、暂停、停止、快进和快退.当用户操作这些键时,系统会广播一个含有<font color="green">ACTION_MEDIA_BUTTON</font>动作的intent。
android之声音管理器AudioManager的使用
Android声音管理AudioManager使用手机都有声音模式,声音、静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能。
在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。
以下分别是AudioManager设置声音模式和调整声音大小的方法。
如何获取声音管理器:AudioManager audioManager = (AudioManager)this.getSystemService(AUDIO_SERVICE);里面主要的方法:A、设置声音模式//声音模式AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); //静音模式AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); //震动模式AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);B、调整声音大小//减少声音音量AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0); //调大声音音量AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);getMode()获取音频模式getRingerMode()获取铃声震动模式----------------------------------------------------------------这里如果使用了和手机震动有关的模式,记得添加权限。
android.permission.VIBRATE哦!参考:/blog/1125304。
安卓手机音量调整办法(听筒、话筒、扬声器)
安卓手机音量调整办法(听筒、话筒、扬声器)1,下面是听筒音量调正方法:在拨号界面输入*#*#3646633#*#* 会出现一个英文界面,就是工程模式了。
选择AUDIO—–>NORMAL MODE,关掉输入法窗口,就看到下面的值了。
NORMAL MODE跟LoudSpeaker Mode的值要求调一样。
选择Audio,然后选择LoudSpeaker,选择SPH,现在开始设定几个LEVEL的值。
自己填好数字后,点击SET就好了。
无需重启手机就生效了,分别如下:LEVEL 0—— VALUE 0 SETLEVEL 1——-VALUE 48 SETLEVEL 2——-VALUE 96 SETLEVEL 3——-VALUE 112 SETLEVEL 4——-VALUE 128 SETLEVEL 5——-VALUE 148 SETLEVEL 6——-VALUE 160 SET2,铃声音量调正方法:选择AUDIO—–>NORMAL MODE,关掉输入法窗口,就看到下面的值了。
NORMAL MODE跟LoudSpeaker Mode的值要求调一样。
选择Audio,然后选择LoudSpeaker,选择Ring,现在开始设定几个LEVEL的值。
自己填好数字后,点击SET就好了。
无需重启手机就生效了,分别如下:LEVEL 0—— VALUE 0 SETLEVEL 1——-VALUE 60 SETLEVEL 2——-VALUE 150 SETLEVEL 3——-VALUE 176 SETLEVEL 4——-VALUE 190 SETLEVEL 5——-VALUE 210 SETLEVEL 6——-VALUE 220 SETMax Vol 这个值是130 只需要调正一次就可以。
3,多媒体音量方法:选择AUDIO—–>NORMAL MODE,关掉输入法窗口,就看到下面的值了。
NORMAL MODE跟LoudSpeaker Mode的值要求调一样。
ANDROIDAudio音效的设置和控制课案
ArcherMind Inc. ConfidentialA u d i o音效的设置和控制学习总结History12年04月23日V1 完成文档Author 王京阳目录1.0 Audio系统综述 (2)1.1 Audio系统结构 (3)1.2 Audio系统代码位置 (4)1.3 Audio系统和上层接口 (5)1.3.1 Audio系统的各个层次 (5)1.3.2 media库中的Audio框架部分 (6)1.3.3 AudioFlinger本地代码 (8)1.3.4 Audio系统的JNI代码 (9)1.3.5 Audio系统的Java代码 (9)2.0 音效设置及控制 (11)2.1 不同类型声音资源的设置 (11)2.2 拍照/录音时候的声音文件 (12)2.3 默认铃声的设置 (14)2.4 拨号界面专属拨号按键音设置 (17)2.5 添加音频效果的设置项 (19)2.6 音量控制 (24)2.7 音频系统 (27)2.7.1 音频类型 (28)2.7.2 输入输出设备 (28)2.7.3 音频策略管理 (30)2.8 RingerMode (31)2.8.1利用AudioManager使用RingerMode (31)2.8.2 RingerMode在AudioService中内部实现 (31)2.8.3 配置RingerMode对特定AudioStream的影响 (32)1.0A u d i o系统综述Audio系统在Android中负责音频方面输入/输出层次,一般负责播放PCM声音输出和从外部获取PCM声音,以及管理声音设备和设置。
1.1A u d i o系统结构主要分成如下几个层次:(1)media库提供的Audio系统本地部分接口;(2)AudioFlinger作为Audio系统的中间层;(3)Audio的硬件抽象层提供底层支持;(4)Audio接口通过JNI和Java框架提供给上层。
Android原生音量控制实例详解
Android原⽣⾳量控制实例详解本⽂主要涉及AudioService。
还是基于5.1.1版本的代码。
AudioService.java⽂件位于/framework/base/media/java/android/media/下。
⾳量控制是AudioService最重要的功能之⼀。
先总结⼀下:1. AudioService⾳量管理的核⼼是VolumeStreamState。
它保存了⼀个流类型所有的⾳量信息。
2. VolumeStreamState保存了运⾏时的⾳量信息,⽽⾳量的⽣效则是在底层AudioFlinger完成的。
所以进⾏⾳量设置需要做两件事情:更新VolumeStreamState存储的⾳量值,设置⾳量到Audio底层系统。
3. VolumeDeathHandler是VolumeStreamState的⼀个内部类。
它的实例对应在⼀个流类型上执⾏静⾳操作的⼀个客户端,是实现静⾳功能的核⼼对象。
⾳量定义Andorid5.1在AudioSystem.java定义了有10种流类型。
每种流类型的⾳量都是相互独⽴的,Android也在AudioService.java定义了⼏个数组:MAX_STREAM_VOLUME(最⼤⾳量),DEFAULT_STREAM_VOLUME(默认⾳量⼤⼩),STREAM_VOLUME_ALIAS_VOICE(映射的流类型)。
虽然Android5.1中拥有10种流类型,但是为了便于使⽤,android通过判断设备的类型,去映射具体流类型。
Android5.1在AudioSystem.java中提供了3个设备(DEFAULT,VOICE,TELEVISION)作为可选择项,分别去映射我们具体的⾳频流类型。
其中,DEFAULT和VOICE类型的⾳频映射是⼀致的。
所以,从上表中可以看出,在⼿机设备当中,我们当前可调控的流类型⾳量其实只有5个,当你想调节STREAM_SYSTEM,STREAM_NOTIFICATION等流类型的⾳量时,实际上是调节了STREAM_RING的⾳量。
Android 用AudioManager类控制音量
>
< /ImageButton>
< /AbsoluteLayout>
程序类分别为:
1、viewHolder
界面上的所有控件和元素都在这里静态声明
package com.terry;
import android.media.AudioManager;
邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:
方法:adjustVolume(int direction, int flags)
解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.main);
findview();
android:id="@+id/normalButton"
android:layout_width="60px"
android:layout_height="60px"
android:layout_x="50px"
android:layout_y="272px"
程序入口处,和主要逻辑代码的处理,程序开头以 (AudioManager)getSystemService(AUDIO_SERVICE); 取得 AudioManager 对象。然后再利用该对象来对铃声进行调整。声明了一个返回 ImageButton 的方法,用来处理各自按钮点击所执行的不同事件和对图片的状态进行调整设置。以下把代码提供给大家:
[实用教程] 安卓系统智能手机如何调节听筒和话筒音量漫谈
第五步,当我们选择loudspeaker(喇叭模式)选项后,便又会出现许多选项,还是挑几个重要的选项说,1、key tone(按键音) ;2、microphone(麦克风,也就是话筒);3、FM(收音机)audio(音量)。
此外,normal mode(正常模式)和loudspeaker(喇叭模式)里面的选项与loudspeaker(喇叭模式)选项是基本上一样的。这里就不多说了。
第六步,实例操作一下,比如说,我对着手机说话,对方感觉我说话的声音比较小,那么我们便可以通过相应的选择找到tone选项。然后点击tone选项后,在随后出现来的一堆选项中找到microphone(麦克风)选项,然后把25改成14,然后再点击set键。那么设置就完成了,如果我们自己感觉音量小,就选择audio选项,然后设置数字值,就可以了。我们需要注意的是数字代表的级别是数字值越大,相对应的声音就越小。因此把声音调的越高,对应的数字就越小。
[实用教程] 安卓系统智能手机如何调节听筒和话筒音量漫谈
许多使用安卓系统智能手机的人总感觉安卓系统的手机听筒和话筒的音量小,却找不到调节音量的设置开关在哪里,这里我们谈一下安卓系统智能手机调节音量的方法。
第一步打开手机通话键盘,然后在键盘上输入*#*##*#*,然后手机便可进入工程模式,这里我们说一下,由于手机CPU处理器的不同,输入的内容也不一样,这里输入*#*##*#*,是针对MT6516处理器的dio,选择audio。
第三步,选择audio选项后会再次出现几个英文选项。我们只需要注意四个选项就可以:1、set mode(模式设置);2、normal mode(正常模式);3、loudspeaker mode(喇叭模式);4、headset mode(耳机模式),其他选项用不到,这里就不介绍了。
华为手机的声音调节技巧与效果优化
华为手机的声音调节技巧与效果优化手机作为现代人生活中必不可少的工具,其中音频功能的体验对用户来说尤为重要。
华为作为一家知名的手机制造商,其手机在音频方面的性能一直备受用户好评。
本文将介绍华为手机的声音调节技巧,并分享一些优化声音效果的方法,帮助用户在使用华为手机时获得更好的音频体验。
一、声音调节技巧1. 音量调节华为手机提供了便捷的音量调节方式,用户可以通过侧边的音量键或者在屏幕上下滑动调出音量控制面板,快速调整系统音量、媒体音量和通知音量。
此外,用户还可以通过设置中的声音选项对铃声、媒体音量和通知音量进行单独调节,以满足个人需求。
2. 声音模式设置华为手机提供了多种声音模式供用户选择,如智能模式、会议模式、震动模式等。
用户可以根据不同场景选择适合的声音模式,以达到最佳的音频效果。
同时,用户还可以自定义声音模式,根据个人喜好设置铃声、通知音和振动强度,让手机的声音更贴合自己的需求。
3. 声音增强功能华为手机内置了声音增强功能,用户可以在设置中找到该选项,并根据个人喜好进行调节。
声音增强功能可以提升音频的清晰度和音量,让用户在听音乐、观看视频或者打电话时获得更好的听觉体验。
二、声音效果优化1. 使用高质量音频文件为了获得更好的音频效果,用户可以选择高质量的音频文件来播放。
比如,在听音乐时,选择高比特率的音乐文件,可以获得更高保真度的音质。
此外,用户还可以选择无损音频格式,如FLAC等,以保留更多音频细节。
2. 耳机选择与使用耳机作为音频输出设备,对音频效果有着重要的影响。
用户在选择耳机时,可以考虑购买音质较好的产品,如声音还原度高、频响范围广的耳机。
此外,正确佩戴和使用耳机也能提升音频效果,用户应该将耳机正确插入手机耳机孔,并注意耳机线的保护,避免因损坏而影响音质。
3. 音效调节与均衡器设置华为手机提供了音效调节和均衡器设置的功能,用户可以根据自己的喜好进行调节。
音效调节可以改变音频的声场表现,如3D环绕音效、低音增强等。
android音量调整流程+HDMI音量控制修改
当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volum e +/- 则直接由AudioManage r.jav a处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUS T_LOWER(- 键)、ADJUS T_RAISE(+ 键)、ADJUS T_SAM E(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。
adjustSuggestedStreamVolume方法内直接通过IAudioService获取framework层的AudioServic e服务,AudioServic e针对强制使用某种音频,通过AudioSystem的JNI从HAL 层获取状态,并进行切换,再执行adjustMasterVolum e / adjustSuggestedStreamVolume 方法,方法内部处理了STREA M_REMOT E_MUSIC和非REMOT E_MUSIC的音量调整,STREA M_REMOT E_MUSIC是在当后台播放音乐时,不在前台运行的情况。
adjustSuggestedStreamVolume先对当前strea m获取在执行的streamtyp e类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtyp e,得到streamtyp e后如果是STREA M_REMOT E_MUSIC,将清楚flags中的标志FLA G_PLA Y_SOUND、FLA G_FIXED_VOLUM E 等。
STREA M_REMOT E_MUSIC类型继续执行adjustRemoteVolum e,否则执行adjustStreamVolum e,这里主要进入adjustStreamVolum e方法。
android音量调整流程HDMI音量控制修改
当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volum e +/- 则直接由AudioManage r.jav a处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUS T_LOWER(- 键)、ADJUS T_RAISE(+ 键)、ADJUS T_SAM E(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。
adjustSuggestedStreamVolume方法内直接通过IAudioService获取framework层的AudioServic e服务,AudioServic e针对强制使用某种音频,通过AudioSystem的JNI从HAL 层获取状态,并进行切换,再执行adjustMasterVolum e / adjustSuggestedStreamVolume 方法,方法内部处理了STREA M_REMOT E_MUSIC和非REMOT E_MUSIC的音量调整,STREA M_REMOT E_MUSIC是在当后台播放音乐时,不在前台运行的情况。
adjustSuggestedStreamVolume先对当前strea m获取在执行的streamtyp e类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtyp e,得到streamtyp e后如果是STREA M_REMOT E_MUSIC,将清楚flags中的标志FLA G_PLA Y_SOUND、FLA G_FIXED_VOLUM E 等。
STREA M_REMOT E_MUSIC类型继续执行adjustRemoteVolum e,否则执行adjustStreamVolum e,这里主要进入adjustStreamVolum e方法。
android音量调整流程+HDMI音量控制修改
当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volum e +/- 则直接由AudioManage r.jav a处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUS T_LOWER(- 键)、ADJUS T_RAISE(+ 键)、ADJUS T_SAM E(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。
adjustSuggestedStreamVolume方法内直接通过IAudioService获取framework层的AudioServic e服务,AudioServic e针对强制使用某种音频,通过AudioSystem的JNI从HAL 层获取状态,并进行切换,再执行adjustMasterVolum e / adjustSuggestedStreamVolume 方法,方法内部处理了STREA M_REMOT E_MUSIC和非REMOT E_MUSIC的音量调整,STREA M_REMOT E_MUSIC是在当后台播放音乐时,不在前台运行的情况。
adjustSuggestedStreamVolume先对当前strea m获取在执行的streamtyp e类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtyp e,得到streamtyp e后如果是STREA M_REMOT E_MUSIC,将清楚flags中的标志FLA G_PLA Y_SOUND、FLA G_FIXED_VOLUM E 等。
STREA M_REMOT E_MUSIC类型继续执行adjustRemoteVolum e,否则执行adjustStreamVolum e,这里主要进入adjustStreamVolum e方法。
android声音调节流程
Android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。
正常处理过程:1.调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法来完成逻辑处理;2.AudioService调用VolumePanel画出音量调整界面,并发送音量变动广播消息,3.StatusBarPolicy,接收广播消息判断是否在状态栏显示静音或振动图标。
问题点:1.AudioManager如何接收音量调整事件?答:PhoneWindowManager.interceptKeyBeforeQueueing处理的WindowManagerService循环读取下面的消息再做分发到窗口接收,在消息分发前会有一个类做消息过滤处理,就是PhoneWindowManager.interceptKeyBeforeQueueing;比如音量调整、Home键都在这个类里面做特殊处理,详细内容后面会在其它该当再补充2.谁负责处理音量显示的?答:AudioManager调用AudioService来显示的。
事件触发在AudioManager,代码的执行实现在AudioService中。
状态栏是SystemUI的APK包StatusBarPolicy中接收广播消息来处理的。
源码位置:/frameworks/base/media/java/Android/media/AudioManager.java/frameworks/base/media/java/Android/media/AudioService.java/framework/base/core/java/Android/view/VolumePanel.java/frameworks/base/packages/SystemUI/src/com/Android/systemui/statusbar/StatusBarPoli cy.javaAudioService.adjustStreamVolume方法完成以下三个功能:一.音量调整音量调整分为两步:先查看模式(Ring mode)是否需要调整? 然后再调用调整音量。
音量控制键控制的音频流(setVolumeControlStream)描述
⾳量控制键控制的⾳频流(setVolumeControlStream)描述当开发多媒体应⽤或者游戏应⽤的时候,需要使⽤⾳量控制键来设置程序的⾳量⼤⼩。
在Android系统中有多中⾳频流,通过Activity中的函数 setVolumeControlStream(int streamType)可以设置该Activity中⾳量控制键控制的⾳频流,⼀般在onCreate 函数中设置。
:•AudioManager.STREAM_MUSIC /** The audio stream for music playback */•AudioManager.STREAM_RING /** The audio stream for the phone ring */•AudioManager.STREAM_ALARM /** The audio stream for alarms */•AudioManager.STREAM_NOTIFICATION /** The audio stream for notifications */•AudioManager.STREAM_SYSTEM /** The audio stream for system sounds */•AudioManager.STREAM_VOICECALL /** The audio stream for phone calls */:void android.app.Activity .setVolumeControlStream(int streamType)Suggests an audio stream whose volume should be changed by the hardware volume controls.The suggested audio stream will be tied to the window of this Activity. If the Activity is switched, the stream set here is no longer the suggested stream. The client does not need to save and restore the old suggested stream value in onPause and onResume.Parameters:streamType The type of the audio stream whose volume should be changed by the hardware volume controls. It is not guaranteed that the hardware volume controls will always change this stream's volume (for example, if a call is in progress, its stream's volume may be changed instead). To reset back to the default, useE_DEFAULT_STREAM_TYPE .。
Android中默认系统的声音大小修改和配置详解
Android中默认系统的声⾳⼤⼩修改和配置详解前⾔声⾳管理系统⽤来实现声⾳的输⼊和输出、声⾳的控制和路由等功能,包括主和各种⾳源的⾳量调节、声⾳焦点控制,声⾳外设的检测和状态管理,声⾳源输⼊和输出的策略管理、⾳效的播放、⾳轨设置和播放、录⾳设置和启动等功能。
最近在做定制需求的时候,需要修改系统通知的声⾳,将其禁⽤掉,避免第三⽅应⽤发送通知时,声⾳很⼤吓到⽤户。
索性就把通知声⾳关掉。
下⾯就说说关闭声⾳的⼏种⽅法,以及修改系统默认声⾳的⽅法,分享出来供⼤家参考学习,下⾯话不多说了,来⼀起看看详细的介绍吧。
本⽂是基于Android5.1的代码⼀、直接修改系统层默认的声⾳⼤⼩在系统代码frameworks/base/media/java/android/media/AudioService.java的开头定义了两个数组,⼀个MAX_STREAM_VOLUME 这⾥⾯定义了各种声⾳的最⼤值(最⼤值不是100,所以需要AudioManager.getStreamMaxVolume(type)来获取各个⾳量的最⼤值),然后进⾏设置。
还定义了⼀个数组DEFAULT_STREAM_VOLUME 这⾥⾯则和MAX_STREAM_VOLUME⾥定义的顺序是⼀样,表明了各种声⾳的默认的⼤⼩。
此块代码如下:/** @hide Maximum volume index values for audio streams */private static int[] MAX_STREAM_VOLUME = new int[] {5, // STREAM_VOICE_CALL7, // STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME7, // STREAM_RING15, // STREAM_MUSIC7, // STREAM_ALARM7, // STREAM_NOTIFICATION15, // STREAM_BLUETOOTH_SCO7, // STREAM_SYSTEM_ENFORCED15, // STREAM_DTMF15 // STREAM_TTS};private static int[] DEFAULT_STREAM_VOLUME = new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM5, // STREAM_RING11, // STREAM_MUSIC6, // STREAM_ALARM5, // STREAM_NOTIFICATION7, // STREAM_BLUETOOTH_SCO7, // STREAM_SYSTEM_ENFORCED11, // STREAM_DTMF11 // STREAM_TTS};如果我们需要修改默认的通知声⾳,则可以将STREAM_NOTIFICATION 前⾯的数值 5 给为 0即可,这样默认声⾳就为0 了。