美文网首页
封装一个Android音量管理的工具类

封装一个Android音量管理的工具类

作者: 超级绿茶 | 来源:发表于2019-11-18 12:01 被阅读0次

    Android的音量管理用的是AudioManager类。这个类可以设置声音是用手机扬声器还是手机耳机,音响的大小等功能。其用法比较单一,所以将这些功能封装进一个单例模式的工具类以便使用。

    这里整理了一下AudioManager常用的各种常量:
    streamType类型:(音量类型)

    • STREAM_ALARM 提示音
    • STREAM_MUSIC 音乐媒体音
    • STREAM_NOTIFICATION 通知栏音频,
    • STREAM_RING 铃声
    • STREAM_SYSTEM 系统
    • STREAM_VOICE_CALL 通话
    • STREAM_DTMF 双音多频

    direction类型:(音量大小)

    • ADJUST_LOWER 降低音量
    • ADJUST_RAISE 升高音量
    • ADJUST_SAME 保持不变

    flags类型:(变动时的表现)
    FLAG_PLAY_SOUND 调整音量时播放声音
    FLAG_SHOW_UI 调整音量时会显示系统的音量界面
    0 表示什么都不做

    public class AudioHelper {
        private AudioHelper(Context context) {
            initAudioManager(context);
        }
    
        public synchronized static AudioHelper getInstance(Context context) {
            if (INSTANCE == null)
                INSTANCE = new AudioHelper(context);
            return INSTANCE;
        }
    
        private static AudioHelper INSTANCE;
        private Context context;
        private AudioManager audioManager;
    
        /**
         * 初始化音频管理器
         */
        private void initAudioManager(Context context) {
            this.context = context.getApplicationContext();
            audioManager = (AudioManager) this.context.getSystemService(Context.AUDIO_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
            } else {
                audioManager.setMode(AudioManager.MODE_IN_CALL);
            }
            audioManager.setSpeakerphoneOn(true);//默认为扬声器播放
        }
    
        /**
         * 设置是否使用扬声器
         *
         * @param speakerMode true为使用扬声器,false为使用耳机
         */
        public void speakerhoneSwitch(boolean speakerMode) {
            audioManager.setSpeakerphoneOn(speakerMode);
        }
    
        /**
         * 获取音频流的最大音量
         *
         * @param streamType 音频流类型
         */
        public int getMaxVolume(int streamType) {
            return audioManager.getStreamMaxVolume(streamType);
        }
    
        /**
         * 获取音频流的当前音量
         *
         * @param streamType 音频流类型
         */
        public int getCurrentVolume(int streamType) {
            return audioManager.getStreamVolume(streamType);
        }
    
        /**
         * 获取播放音乐时的最大音响
         */
        public int getMusicMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_MUSIC);
        }
    
        /**
         * 获取铃声的最大音响
         */
        public int getRingMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_RING);
        }
    
        /**
         * 获取提示音的最大音响
         */
        public int getAlamMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_ALARM);
        }
    
        /**
         * 获取通知的最大音响
         */
        public int getNotificationMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_NOTIFICATION);
        }
    
        /**
         * 获取系统音的最大音响
         */
        public int getSystemMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_SYSTEM);
        }
    
        /**
         * 获取通话的最大音响
         */
        public int getVoiceCallMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_VOICE_CALL);
        }
    
        /**
         * 获取双音频的最大音响
         */
        public int getDTMFMaxVolume() {
            return getMaxVolume(AudioManager.STREAM_DTMF);
        }
    
        /**
         * 直接设置音响大小
         *
         * @param streamType 音频类类型
         * @param volume     音频大小
         */
        public void setVolume(int streamType, int volume) {
            volume = (volume > getMaxVolume(streamType)) ? getMaxVolume(streamType) : volume;
            audioManager.setStreamVolume(streamType,
                    volume,
                    AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
        }
    
        /**
         * 调大音量
         *
         * @param streamType 音频类类型
         */
        public void raiseVolume(int streamType) {
            int currentVolume = getCurrentVolume(streamType);
            if (currentVolume < getMaxVolume(streamType)) {
                audioManager.adjustStreamVolume(streamType,
                        AudioManager.ADJUST_RAISE,
                        AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
            }
        }
    
        /**
         * 调小音量
         */
        public void lowerVolume(int streamType) {
            int currentVolume = getCurrentVolume(streamType);
            if (currentVolume > 0) {
                audioManager.adjustStreamVolume(streamType,
                        AudioManager.ADJUST_LOWER,
                        AudioManager.FLAG_SHOW_UI);
            }
        }
    
        public void raiseMusicVolume() {
            raiseVolume(AudioManager.STREAM_MUSIC);
        }
    
        public void lowerMusicVolume() {
            lowerVolume(AudioManager.STREAM_MUSIC);
        }
    
    }
    

    点击链接加入群聊【口袋里的安卓】:https://jq.qq.com/?_wv=1027&k=5z4fzdT

    相关文章

      网友评论

          本文标题:封装一个Android音量管理的工具类

          本文链接:https://www.haomeiwen.com/subject/mhbvictx.html