记录一下。

在activity 监听按键:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {//设置聊天播放语音是 声音大小 随按键 变化int direction = keyCode == KeyEvent.KEYCODE_VOLUME_UP ? AudioManager.ADJUST_RAISE : AudioManager.ADJUST_LOWER;int flags = AudioManager.FX_FOCUS_NAVIGATION_UP;AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);if (扬声器模式){am.adjustStreamVolume(AudioManager.STREAM_SYSTEM, direction, flags);}else {am.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, direction, flags);}return true;}return super.onKeyDown(keyCode, event);
}

听筒、扬声器 模式切换:


private static void init(Context mContext) {audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
/*** 设置播放模式*/
public static void setAudioStreamType(Context mContext, boolean speaker) {if (speaker) {audioManager.setSpeakerphoneOn(true);audioManager.setMode(AudioManager.MODE_NORMAL);//设置音量,解决有些机型切换后没声音或者声音突然变大的问题audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM,audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM), AudioManager.FX_KEY_CLICK);} else {audioManager.setSpeakerphoneOn(false);//关闭扬声器//5.0以上if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);//设置音量,解决有些机型切换后没声音或者声音突然变大的问题audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), AudioManager.FX_KEY_CLICK);} else {audioManager.setMode(AudioManager.MODE_IN_CALL);audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), AudioManager.FX_KEY_CLICK);}}
}

audioManager.setMode(int mode)
mode 类型参照表:

/** Used to identify the volume of audio streams for phone calls */
public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;/** Used to identify the volume of audio streams for system sounds */
public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;/** Used to identify the volume of audio streams for the phone ring */
public static final int STREAM_RING = AudioSystem.STREAM_RING;/** Used to identify the volume of audio streams for music playback */
public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;/** Used to identify the volume of audio streams for alarms */
public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;/** Used to identify the volume of audio streams for notifications */
public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;/** Used to identify the volume of audio streams for DTMF Tones */
public static final int STREAM_DTMF = AudioSystem.STREAM_DTMF;/** Used to identify the volume of audio streams for accessibility prompts */
public static final int STREAM_ACCESSIBILITY = AudioSystem.STREAM_ACCESSIBILITY;

参考:

  • Android 听筒扬声器切换(多机型兼容、兼容5.0以上)

Android 听筒扬声器切换 并且监听音量变化相关推荐

  1. Android 听筒扬声器切换(多机型兼容、兼容5.0以上)

    目录 目录 亲测有效机型案例有限仅供参考 代码 用法 Demo Feature 本以为是个很简单的切换,没想到搞了快一天.网络上各种答案,各种坑,浪费了大量的时间. 亲测有效机型(案例有限.仅供参考) ...

  2. android 听筒模式外放模式的切换,YY项目之Android 听筒 扬声器 切换

    废话不多说,直接上代码: private void setSpeakerphoneOn(boolean on) { if (on) { // 为true打开喇叭扩音器:为false关闭喇叭扩音器. a ...

  3. Android 听筒 扬声器 切换

    private void setSpeakerphoneOn(boolean on) { if (on) { // 为true打开喇叭扩音器:为false关闭喇叭扩音器. audioManager.s ...

  4. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键

    本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){         ...

  5. android 窗口监听按键,Android编程实现Dialog窗体监听的方法

    本文实例讲述了Android编程实现Dialog窗体监听的方法.分享给大家供大家参考,具体如下: 今天做了一个Dialong窗体监听包括窗体内的xml监听. 效果图: test.class代码 pac ...

  6. android 监听界面变化,Android之页面有变化用onWindowFocusChanged来监听权限是否开启...

    1 问题 我们需要在Activity里面监听网络变化.热点是否开启和关闭.GPS服务是否开启.位置权限是否开启等一些列行为. 2 思路 方法一: 如果是需要启动activity进行权限申请,我们可以用 ...

  7. Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动

    为了便于进行 系统级别的消息通知,Android引入了一套广播消息机制. 1.广播机制简介: 因为Android中的每个应用程序都可以对自己感兴趣的广播尽心注册,这样程序只会接收自己所关心的广播内容, ...

  8. android 监听图库变化,Android ContentObserver 监听图库变化

    电脑环境是XP,软件是gVim7.3,安装在C盘的 Program Files 下.如何设置gVim的字体和背景颜色:C---Program Files---Vim---_vimrc文件,用文本编辑器 ...

  9. android 关机消息广播,Android开机、关机播音监听

    Android开机.关机广播监听 一.开机广播的监听 1.在AndroidManifest.xml文件注册接收开机广播 2.在BroadcastReceiver里执行要做的事情 public clas ...

最新文章

  1. 通用兄弟元素选择器 E ~ F
  2. 回顾2019年5个重大宕机事件
  3. 标签的宽度_27 表格标签
  4. 【bzoj1010-toy】斜率优化入门模板
  5. C++ 定义 string
  6. 运筹学与计算机知识,计算机、数学、运筹学等领域的36个重要算法
  7. 为什么css效果在本地测试没问题,上传到服务器后却显示位置乱动,css下拉菜单本地正常,上传后360浏览器中显示错位,火狐、IE8显示正常...
  8. 智能一代云平台(二十三):Mycat高可用的探索
  9. paper reading:[第一代GCN] Spectral Networks and Deep Locally Connected Networks on Graphs
  10. CodeForces615A-Bulbs-模拟
  11. Atitit.软件gui按钮and面板---通讯子系统(区)-- github 的使用....
  12. IDEA插件-Translation提示更新TKK失败,配置有道翻译解决
  13. 智能优化算法——篇1
  14. 服务器自检后显示scsi,“服务器百问百答”服务器怎样格式化SCSI硬盘?
  15. el-table使用span-method合并行
  16. python实现Ensembl ID和gene symbol的相互转换
  17. 修改远程计算机 时间,Pubwin服务器时间修改的四种办法
  18. 由浅入深玩转华为WLAN—25 高可用性系列(1)双击热备概述
  19. 硬货专栏 |深入浅出 WebRTC AEC(声学回声消除)
  20. java 1st 2nd 3rd 4th_1st(3rd)

热门文章

  1. 在VS Code中调试nasm,使用golink连接
  2. CPU是沙子做的,凭什么卖那么贵?
  3. Git 撤销已提交的文件
  4. python添加pythonhome参数,如何在python中向烧瓶烧瓶添加参数?
  5. 利用光盘安装linux系统
  6. upupoo服务器维护中是什么情况,upupoo用不了怎么办-解决upupoo打不开的方法 - 河东软件园...
  7. 左方之地 - 结论 - 组合计数
  8. 点线特征融合求取相机位姿
  9. 魔兽DOTA高玩的自述
  10. SSM视频点播系统3.0