声音的类型有:定义在AudioSystem.java文件中

/* The default audio stream */public static final int STREAM_DEFAULT = -1;/* The audio stream for phone calls */public static final int STREAM_VOICE_CALL = 0;/* The audio stream for system sounds */public static final int STREAM_SYSTEM = 1;/* The audio stream for the phone ring and message alerts */public static final int STREAM_RING = 2;/* The audio stream for music playback */public static final int STREAM_MUSIC = 3;/* The audio stream for alarms */public static final int STREAM_ALARM = 4;/* The audio stream for notifications */public static final int STREAM_NOTIFICATION = 5;/* @hide The audio stream for phone calls when connected on bluetooth */public static final int STREAM_BLUETOOTH_SCO = 6;/* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */public static final int STREAM_SYSTEM_ENFORCED = 7;/* @hide The audio stream for DTMF tones */public static final int STREAM_DTMF = 8;/* @hide The audio stream for text to speech (TTS) */public static final int STREAM_TTS = 9;
正常情况下在音、视频界面调节音量调节的Stream是STREAM_MUSIC,回到Luncher调节的是STREAM_VOICE_CALL,但这个切换有点延迟StreamOverride.sDelayMs,导致退出音、视频界面后马上调节,改变的还是STREAM_MUSIC的大小,如图所示:

可以修改/frameworks/base/media/java/android/media/AudioService.java文件

 /**     * For code clarity for getActiveStreamType(int)     * @param delay_ms max time since last STREAM_MUSIC activity to consider     * @return true if STREAM_MUSIC is active in streams handled by AudioFlinger now or     *     in the last "delay_ms" ms.     */    private boolean isAfMusicActiveRecently(int delay_ms) {        return AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, delay_ms)                || AudioSystem.isStreamActiveRemotely(AudioSystem.STREAM_MUSIC, delay_ms);    }    private int getActiveStreamType(int suggestedStreamType) {        switch (mPlatformType) {        case PLATFORM_VOICE:            if (isInCommunication()) {                if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION)                        == AudioSystem.FORCE_BT_SCO) {                    // Log.v(TAG, "getActiveStreamType: Forcing STREAM_BLUETOOTH_SCO...");                    return AudioSystem.STREAM_BLUETOOTH_SCO;                } else {                    // Log.v(TAG, "getActiveStreamType: Forcing STREAM_VOICE_CALL...");                    return AudioSystem.STREAM_VOICE_CALL;                }            } else if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {                if (isAfMusicActiveRecently(StreamOverride.sDelayMs)) {                    if (DEBUG_VOL)                        Log.v(TAG, "getActiveStreamType: Forcing STREAM_MUSIC stream active");                    return AudioSystem.STREAM_MUSIC;                    } else {                        if (DEBUG_VOL)                            Log.v(TAG, "getActiveStreamType: Forcing STREAM_RING b/c default");                        return AudioSystem.STREAM_RING;                }            } else if (isAfMusicActiveRecently(0)) {                if (DEBUG_VOL)                    Log.v(TAG, "getActiveStreamType: Forcing STREAM_MUSIC stream active");                return AudioSystem.STREAM_MUSIC;            }            break;        case PLATFORM_TELEVISION:            if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {                    // TV always defaults to STREAM_MUSIC                    return AudioSystem.STREAM_MUSIC;            }            break;        default:            if (isInCommunication()) {                if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION)                        == AudioSystem.FORCE_BT_SCO) {                    if (DEBUG_VOL) Log.v(TAG, "getActiveStreamType: Forcing STREAM_BLUETOOTH_SCO");                    return AudioSystem.STREAM_BLUETOOTH_SCO;                } else {                    if (DEBUG_VOL)  Log.v(TAG, "getActiveStreamType: Forcing STREAM_VOICE_CALL");                    return AudioSystem.STREAM_VOICE_CALL;                }            } else if (AudioSystem.isStreamActive(AudioSystem.STREAM_NOTIFICATION,                    StreamOverride.sDelayMs) ||                    AudioSystem.isStreamActive(AudioSystem.STREAM_RING,                            StreamOverride.sDelayMs)) {                if (DEBUG_VOL) Log.v(TAG, "getActiveStreamType: Forcing STREAM_NOTIFICATION");                return AudioSystem.STREAM_NOTIFICATION;            } else if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {                if (isAfMusicActiveRecently(StreamOverride.sDelayMs)) {                    if (DEBUG_VOL) Log.v(TAG, "getActiveStreamType: forcing STREAM_MUSIC");                    return AudioSystem.STREAM_MUSIC;                } else {                    if (DEBUG_VOL) Log.v(TAG,                            "getActiveStreamType: using STREAM_NOTIFICATION as default");                    return AudioSystem.STREAM_NOTIFICATION;                }            }            break;        }        if (DEBUG_VOL) Log.v(TAG, "getActiveStreamType: Returning suggested type "                + suggestedStreamType);        return suggestedStreamType;    }
把isAfMusicActiveRecently(StreamOverride.sDelayMs) 改为: isAfMusicActiveRecently(0) 或一个小的值。


更多相关文章

  1. Android(安卓)选择文件并加载数据到界面
  2. Android(安卓)widget 之RemoteView
  3. Android记录2013年10月20日
  4. android 设置开机不自动进入锁屏状态
  5. android 自定义进度条下载apk并更新
  6. android JB2连拍降速原理介绍
  7. android 利用pull解析xml数据

随机推荐

  1. Android透明字体画法
  2. android 探索首选项框架 ListPreference
  3. Android实现打电话功能
  4. android实现涂鸦,保存涂鸦后的图片,清屏
  5. Install Android(安卓)Composite ADB Int
  6. Android四大组件Service之bindService启
  7. android native call only, no third par
  8. Android实践之TabActivity
  9. How to parse / read JSON data into a A
  10. android 手机判断是否在充电 如断电自动