android中将音量的调节分为全局音量(MasterVolume)和个别音量(StreamVolume)。

    在搞rockchip平台时发现,这两种音量在做静音处理时,行为有所不同。

    StreamVolume在静音后,调节音量大小会从0开始,不会从静音之前的音量开始调节。

    而MasterVolume则能够从静音之前的音量开始。

    如何设置默认使用MasterVolume,还是StreamVolume呢!

    在AudioManager对象中有对静音按键的处理:

        public void handleKeyDown(KeyEvent event, int stream) {
        int keyCode = event.getKeyCode();
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                /*
                 * Adjust the volume in on key down since it is more
                 * responsive to the user.
                 */
                int flags = FLAG_SHOW_UI | FLAG_VIBRATE;

                if (mUseMasterVolume) {
                    adjustMasterVolume(
                            keyCode == KeyEvent.KEYCODE_VOLUME_UP
                                    ? ADJUST_RAISE
                                    : ADJUST_LOWER,
                            flags);
                } else {
                    adjustSuggestedStreamVolume(
                            keyCode == KeyEvent.KEYCODE_VOLUME_UP
                                    ? ADJUST_RAISE
                                    : ADJUST_LOWER,
                            stream,
                            flags);
                    mVolume = getStreamVolume(STREAM_MUSIC);
                    Log.d(TAG,"mVolume = "+mVolume);
                }
                break;
            case KeyEvent.KEYCODE_VOLUME_MUTE:
                if (event.getRepeatCount() == 0) {
                    if (mUseMasterVolume) {
                        setMasterMute(!isMasterMute());
                    } else {
                        // TODO: Actually handle MUTE.                       
                        if(getStreamVolume(STREAM_MUSIC) != 0)
                        {
                            mVolume = getStreamVolume(STREAM_MUSIC);
                            Log.d(TAG,"mVolume = "+mVolume);
                            setStreamVolume(STREAM_MUSIC, 0, FLAG_SHOW_UI);
                        }
                        else
                        {
                            Log.d(TAG,"mVolume = "+mVolume);
                            setStreamVolume(STREAM_MUSIC, mVolume, FLAG_SHOW_UI);
                        }
                    }
                }
                break;
        }
    }


    mUseMasterVolume控制了使用streamvolume还是mastervolume。

    而mUseMasterVolume是从AudioManager的构造函数中初始化的

    mUseMasterVolume = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_useMasterVolume);

    com.android.internal.R.bool.config_useMasterVolume又是什么呢?是framework的配置信息。

    可以从frameworks/base/core/res/res下的values/config.xml中找到如下一行:

     false

    把false改为true即可。


更多相关文章

  1. Android在灭屏的情况下实现长按音量键切换歌曲
  2. Android(安卓)6.0+ TelephonyManager 使用示例(3)来电静音和挂断
  3. Android(安卓)去掉系统默认提示音、移除音量调节的进度条、增加
  4. Android(安卓)利用重力感应调整手机模式
  5. Android_5.0定制--------keyCode实现SystemUI导航栏音量+ - 按钮
  6. Android(安卓)程序获取、设置铃声、音量、静音、扬声器
  7. android学习之播放音频
  8. Android修改音量
  9. Android游戏开发系列教程第四讲(游戏音频)

随机推荐

  1. activity属性设置大全
  2. Android(安卓)图形系统SurfaceFlinger
  3. 【Android】Android的JNI基础编程
  4. android的布局文件简介
  5. Android开发者的Ane简单入门
  6. Android初级教程小案例之单选框RadioGrou
  7. Android中的布局
  8. Android的UI组件之TextView、EditText
  9. Android构建时报错: java.io.IOException:
  10. android binder机制之--(我是Service Mana