美文网首页
封装一个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