a、通过系统服务获得声音管理器:

AudioManager audioManager =  (AudioManager)getSystemService(Service.AUDIO_SERVICE);

b、根据实际需要调用适当的方法:(常用方法)

audioManager.adjustStreamVolume(int streamType, int  direction, int flags);

streamType:声音类型,可取的为STREAM_VOICE_CALL(打电话时的声音), STREAM_SYSTEM(Android系统声音), STREAM_RING(电话铃响), STREAM_MUSIC(音乐声音) or STREAM_ALARM(警告声音)。

direction:调整音量的方向,可取为ADJUST_LOWER(调低音量), ADJUST_RAISE(调高音量), or ADJUST_SAME(保持先前音量)。

flags:可选标志位(如要显示出音量调节UI,使用如下flag:AudioManager.FLAG_SHOW_UI)。

audioManager.setStreamMute(int streamType, boolean state);设置指定声音类型(streamType)是否为静音。如果state为true,则设置为静音;否则,不设置为静音。

audioManager.setRingerMode(int ringerMode);

设置铃音模式,可取值为RINGER_MODE_NORMAL(铃音正常模式), RINGER_MODE_SILENT(铃音静音模式), or RINGER_MODE_VIBRATE(铃音震动模式,即铃音为静音,启动震动)。

audioManager.setMode(int mode);

设置声音模式,可取值为MODE_NORMAL(正常模式,即在没有铃音与电话的情况), MODE_RINGTONE(铃响模式), MODE_IN_CALL(接通电话模式) or MODE_IN_COMMUNICATION(通话模式)。

注意:声音的调节是没有权限要求的。

调整音量方法有两种,一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值.

1、渐进式

public void adjustStreamVolume (int streamType, int direction, int flags)

am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

解释一下三个参数

第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:

STREAM_ALARM 警报

STREAM_MUSIC 音乐回放即媒体音量

STREAM_NOTIFICATION 窗口顶部状态栏Notification,

STREAM_RING 铃声

STREAM_SYSTEM 系统

STREAM_VOICE_CALL 通话

STREAM_DTMF 双音多频,不是很明白什么东西

第二个direction,是调整的方向,增加或减少,可以是:

ADJUST_LOWER 降低音量

ADJUST_RAISE 升高音量

ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量

第三个flags是一些附加参数,只介绍两个常用的

FLAG_PLAY_SOUND 调整音量时播放声音

FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个

2、直接设置音量值的方法:

public void setStreamVolume (int streamType, int index, int flags)

am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);

am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的最大值

am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的当前值

第一个和第三个参数与上面的相同

第二个参数是一个音量的int值,getStreamMaxVolume(int streamType)得到的是该类型音量的最大值,可以根据这个值计算你需要的音量,我这里直接调到最大.

如何设置android的扬声器的开启状态?

A:

只能在MODE_IN_CALL模式下设置Speakerphone(扩音器)的开启状态

步骤1:

AndroidMainfest.xml中添加权限:android.permission.MODIFY_AUDIO_SETTINGS

步骤2:

设置扬声器开启或关闭

AudioManager audioManager = (AudioManager)mActivity.getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL);

audioManager.setSpeakerphoneOn(true);

检测扬声器是否开启

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

boolean isSpeakphoneOn = audioManager.isSpeakerphoneOn();

注意当不需要时一定要将音频模式设置回MODE_NORMAL(普通状态)

AudioManager audioManager = (AudioManager)mActivity.getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_NORMAL);

setSpeakerphone(true)方法的实现

setSpeakerphoneOn(true),看看实现。

这次我没再浪费时间了,我用一个新的工具coolfind,把搜索framework目录,寻找*.java文件,匹配字符串setSpeakerphone。终于,我在

framework/base/media/java/android/media/AudioService.java中找到了。

public void setSpeakerphoneOn(boolean on){

if (!checkAudioSettingsPermission("setSpeakerphoneOn()")) {

return;

}

if (on) {

//看到这里,是不是明白十之八九了?下面这个调用是:

//强制通话使用speaker!原来是这么个意思!

AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION,

AudioSystem.FORCE_SPEAKER);

mForcedUseForComm = AudioSystem.FORCE_SPEAKER;

} else {

AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION,

AudioSystem.FORCE_NONE);

mForcedUseForComm = AudioSystem.FORCE_NONE;

}

}

获取当前正在播放音频的硬件信息

使用不同的硬件设备可能会影响您应用程序的设计方式,您可以通过 AudioManager 来查询当前正在播放音频的硬件设备信息,是内置扬声器,还是有线耳机,或者是蓝牙设备。

if(isBluetoothA2dpOn()) {

// Adjust output for Bluetooth. 蓝牙设备

} elseif(isSpeakerphoneOn()) {

// Adjust output for Speakerphone. 内置扬声器(免提)

} elseif(isWiredHeadsetOn()) {

// Adjust output for headsets 有线耳机

} else{

// If audio plays and noone can hear it, is it still playing? 未知设备

Android音乐编程:管理音频焦点与音频焦点的获取,丢失焦点监听

http://mobile.51cto.com/android-309321.htm

Android音乐编程的管理音频硬件  如:当耳机线脱落,蓝牙设备断开,音频输出流会自动切换到内置扬声器 http://mobile.51cto.com/android-309371.htm

android 音频控件,android AudioManager音频控件相关推荐

  1. android裁剪控件,Android 仿抖音音频裁剪控件

    效果图 QQ图片20201126164657.jpg 功能要求:绘制音频效果,音乐播放后进度滚动,控件可拖动,拖动后获取新的起始时间 (后期会加入根据音乐各个时段分贝大小来动态显示音律线的长短) 控件 ...

  2. android 语音播放工具,Android简易的仿微信聊天的语音播放控件

    说到Android音频播放,可谓108式,方案众多,这里有一篇总结Android几种播放音频的方式的文章,传送门.本文旨在熟悉MediaPlayer的使用,遂此控件封装采用MediaPlayer实现. ...

  3. android 分组柱状图_整理了一个 android 上的波形图及柱状图绘制控件

    SimpleWaveform [说明:以前画过波形图,最近又需要画,略不同,但还得重复写.在网上搜了一下,只找到一个复杂的框架,而我们往往只需要画简单的波形或柱状图.所以我整理提取了过去的代码,有了这 ...

  4. Android技术分享| 【Android 自定义View】多人视频通话控件

    [Android 自定义View]多人视频通话控件 *以上图片截自微信等待中界面 等待中界面 上图是微信多人视频通话时未接通的界面状态,可见每个人的 View 中大致需包含了以下元素. 头像 昵称 L ...

  5. 《android多媒体api》之VideoView 视频播放控件

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  6. android基础ui控件,Android基础——基础UI控件

    日历,时钟,计时器 package com.example.mybaseuii; import androidx.appcompat.app.AppCompatActivity; import and ...

  7. android开发重要控件,Android界面编程——Android基本控件

    Android界面编程 Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户. 作为一个程序员 ...

  8. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  9. android 开发框架 怎么使用,Android快速开发框架dyh详解(二)---控件层的使用

    1.控件组合 1.1.ViewPager + Fragment, 这两个控件的组合在项目里也是比较常用的,效果同ViewPager,但由于是用Fragment所以可以使代码操作起来更方便: 1.1.1 ...

  10. Android之一起玩转下拉刷新控件

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50830639 本文出自:[顾林海的博客] ##前言 下拉刷新控件,想必 ...

最新文章

  1. spring oauth2+JWT后端自动刷新access_token
  2. ios数组基本用法和排序
  3. 数据结构_栈与队列_总结
  4. html5制作当当图书榜页面,当当图书.html
  5. 奈奎斯特稳定性判据的步骤(含详细推导)
  6. Java 实现数据库导出Excle
  7. HW-LCD-070 7寸液晶屏 数据手册
  8. 深入理解BootStrap-- 面板(panel)
  9. html包zip有错误是什么意思,解压缩文件出现错误是什么回事
  10. (二)ElasticSearch实战基础教程(ElasticSearch入门)
  11. 面向初学者的 MQL4 语言系列之4——自定义指标
  12. 虚拟环境Vmware下改变Linux(CentOS7)IP地址
  13. 计算机一级考试选网络题广东,广东计算机一级考试试题及答案
  14. unity实现对话控制
  15. jxls-1.0支持excel2003及excel2007版本
  16. SpringMVC条件查询+分页时下一页丢失查询条件
  17. 服务器无备份位置可用,云服务器备份区域和可用区
  18. 详解Unity中的粒子系统Particle System (三)
  19. 黑马程序员_基础测试
  20. 数学分析(5): 导数

热门文章

  1. pandas 选取第一行_用pandas中的DataFrame时选取行或列的方法
  2. Python花式编程:多层嵌套列表扁平化
  3. 微课|玩转Python轻松过二级(3.1节):列表常用方法
  4. Python3.6下安装扩展库pywin32的正确姿势
  5. java内部邮件系统_java 图形界面 邮件系统
  6. 7.22 C++自学笔记
  7. jsp怎么接受ajax请求参数,通过ajax发送JSON并通过JSP中的请求获取参数
  8. .html()与.text()区别与辨析
  9. java反向链表列表写法,一个使用链表追加,反向和显示的java程序
  10. vue实例方法之set方法的实现原理