上一篇文章中介绍过,在做 SAPA 适配时由于其直连驱动层不经过 Android 的音量增益控制,所以调节系统媒体音量对音量改变无效。如果没有音乐在放的时候,按调节音量的键,默认调节的是铃声的音量,所以在使用 SAPA 播放音频时,因为不经过 Android 层,系统认为没有音乐播放,在按音量键时调节的是铃声音量无法控制播放音量。

思路:

  • 调用系统 API 强制设置为控制媒体音量

  • 截获物理音量键的按键事件,在按音量键时,调出音量显示面板,改变其音量;

参考:

多媒体音量控制介绍

AudioManager的应用

思路一,系统确实提供了 API : forceVolumeControlStream(int streamType) ,但该方法被隐藏了,可以利用反射的机制调用。本文主要是讲解和使用思路二。

本文中是在上一篇:Android 监听系统媒体音量变化的基础上增加了两个接口(放在在 VolumeChangeObserver.java 中):

  • raiseMusicVolume() :显示系统音量面板并增加媒体音量

    /**     * 显示系统音量面板并增加媒体音量     */    public void raiseMusicVolume() {        if (mAudioManager != null) {            //强制增大多媒体音量            mAudioManager.adjustStreamVolume(                    AudioManager.STREAM_MUSIC,                    AudioManager.ADJUST_RAISE,                    AudioManager.FLAG_SHOW_UI);        }    }
  • lowerMusicVolume()显示系统音量面板并降低媒体音量

    /**     * 显示系统音量面板并降低媒体音量     */    public void lowerMusicVolume() {        if (mAudioManager != null) {            //强制降低多媒体音量            mAudioManager.adjustStreamVolume(                    AudioManager.STREAM_MUSIC,                    AudioManager.ADJUST_LOWER,                    AudioManager.FLAG_SHOW_UI);        }    }
调用方式:

在要控制的 Activity 中重载 onKeyDown 方法,如下:

@Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (mVolumeChangeObserver != null) {            switch (keyCode) {                case KeyEvent.KEYCODE_VOLUME_UP://增大系统媒体音量                    mVolumeChangeObserver.raiseMusicVolume();                    return true;                case KeyEvent.KEYCODE_VOLUME_DOWN://减小系统媒体音量                    mVolumeChangeObserver.lowerMusicVolume();                    return true;                default:                    break;            }        }        return super.onKeyDown(keyCode, event);    }

更多相关文章

  1. Android应用在未启动的情况下无法收到指定广播的问题总结
  2. 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmp
  3. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Andro
  4. 阿里巴巴首席战略官:阿里云要当中国Android
  5. Linux Kernel and Android(安卓)休眠与唤醒(中文版)
  6. 无标题文浅入浅出 Android(安卓)安全 (三) Android(安卓)本地用户
  7. Android(安卓)UI开发第二十九篇——Android中五种常用的menu(菜单
  8. Android的多媒体技术――MediaPlayer实现音频与视频的播放
  9. Android之所以不需要关闭后台运行程序 的 理由

随机推荐

  1. Android回炉系列之Surfaceflinger
  2. android studio 不能在线更新android SDK
  3. Android开发环境搭建
  4. Android应用开发基础之数据存储和界面展
  5. Android搜索框:SearchView用法详解
  6. Android(安卓)中导航栏文字居中
  7. 将Linux下的Android签名对pk8和pem转换为
  8. 安卓入门.RelativeLayout相对布局1
  9. Android开发,使用xml drawable制作带边框
  10. Android(安卓)R Launcher3抽屉显示所有应