android 音量设置工具类

一个类似电视项目 ,用的是android 开发板,由于android 音量设置分很多种 ,系统音量,闹钟音量  ,媒体音量....

那么问题来了,如果我的设备没有实体按键 ,没有触摸该怎么处理呢 ?

而且在统一状态下 如何设置相应的音量,我遇到的问题就是,在播放媒体的时候,弹出的是通话音量,本来想找底层开发人员帮我把音量全部统一 ,方案公司懒得改 ,那就只能从应用层来做了,所有的音量统一设置 ,要加一起加,要剪一起剪 。

直接看代码 ,

在Activity service中直接调用AddVoice();  或者reduiceVoice().方法就可以实现音量统一增减 ,里面有做判断,最大音量和最小音量,拿去浪吧


package com.mirror.util;

import android.app.Service;
import android.content.Context;
import android.media.AudioManager;
import android.util.Log;


/**
 * 音量控制管理器
 */

public class VoiceManager {
    private static final String TAG = "VoiceManager";
    Context context;
    AudioManager mAudioManager;

    public VoiceManager(Context context) {
        this.context = context;
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
    }

    /***
     * 增大音量
     */
    public void addVoide() {
        dealCallVoice(true);
        dealSystemVoice(true);
        dealRingVoice(true);
        dealMediaVoice(true);
        dealMessageVoice(true);
    }


    /***
     * 减少声音
     */
    public void reduceVoide() {
        dealCallVoice(false);
        dealSystemVoice(false);
        dealRingVoice(false);
        dealMediaVoice(false);
        dealMessageVoice(false);
    }

    /**
     * 提示音设置
     *
     * @param b
     */
    private void dealMessageVoice(boolean b) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
        int current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
        Log.i(TAG, "===处理前提示音音量====" + current + "  /" + max);
        if (b) {
            if (current == max) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, current + 1, 0);
        } else {
            if (current < 1) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, current - 1, 0);
        }
        int maxdeal = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
        int currentdeal = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
        Log.e(TAG, "===处理前后提示音音量====" + currentdeal + "  /" + maxdeal);
    }

    /***
     * 处理媒体音量
     * @param b
     */
    private void dealMediaVoice(boolean b) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        int mediamax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int mediacurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        Log.i(TAG, "===处理前媒体音量====" + mediacurrent + "  /" + mediamax);
        if (b) {
            if (mediacurrent == mediamax) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mediacurrent + 1, 0);
        } else {
            if (mediacurrent < 1) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mediacurrent - 1, 0);
        }
    }

    /***
     * 铃声音量
     * @param b
     */
    private void dealRingVoice(boolean b) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        int ringmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
        int ringcurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
        Log.i(TAG, "===处理前铃声音量====" + ringcurrent + "  /" + ringmax);
        if (b) {
            if (ringcurrent == ringmax) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_RING, ringcurrent + 1, 0);
        } else {
            if (ringcurrent < 1) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_RING, ringcurrent - 1, 0);
        }
    }

    /***
     * 处理系统音量
     * @param b
     */
    private void dealSystemVoice(boolean b) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        int sysmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        int syscurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);
        Log.i(TAG, "===设置前系统音量====" + syscurrent + "  /" + sysmax);
        if (b) {
            if (syscurrent == sysmax) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, syscurrent + 1, 0);
        } else {
            if (syscurrent < 1) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, syscurrent - 1, 0);
        }
    }

    /***
     *  处理通话音量
     * @param isAdd
     * true 是音量+
     * false 是音量-
     */
    private void dealCallVoice(boolean isAdd) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        int callmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
        int callcurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
        Log.e(TAG, "=====设置前通话音量==" + callcurrent + "/" + callmax);
        if (isAdd) {
            if (callcurrent == callmax) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, callcurrent + 1, 0);
        } else {
            if (callcurrent < 1) {
                return;
            }
            mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, callcurrent - 1, 0);
        }
    }


    /***
     * 静音
     */
    public void stopMediaVoice() {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
        }
        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);  //设置媒体音量为 0
    }


}

猜你喜欢

转载自blog.csdn.net/fkgjdkblxckvbxbgb/article/details/78647575